我怎么能减去两个通用对象(T - T)在C#中(例如:日期时间 - 日期时间)? [英] How can I subtract two generic objects (T - T) in C# (Example: DateTime - DateTime)?

查看:105
本文介绍了我怎么能减去两个通用对象(T - T)在C#中(例如:日期时间 - 日期时间)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了泛型类

public class Interval<T> where T : IComparable // for checking that Start < End 
{
    public T Start { get; set; }
    public T End { get; set; }
    ...
}

和我使用这个类有日期时间, 。INT等

And I use this class with DateTime, int, etc.

我需要的持续时间属性,返回像时间:

I need a Duration property that returns a duration like:

public object Duration
{
    get
    {
        return End - Start;
    }
}



但是,当包括在我的课该属性,编译器提出的 A 逻辑错误 - 运营商

But when this property is included in my class, the compiler raises a logical error on the - operator.

我能做些什么通常达到这个目标,还是应该我的忽略

What can I do to achieve this goal normally, or should I ignore it?

推荐答案

尝试是这样的:

static void Main(string[] args)
{
    Tuple<int, bool> value = JustAMethod<int>(5, 3);
    if (value.Item2)
    {
        Console.WriteLine(value.Item1);
    }
    else
    {
        Console.WriteLine("Can't substract.");
    }
}
public static Tuple<T, bool> JustAMethod<T>(T arg1, T arg2)
{
    dynamic dArg1 = (dynamic)arg1;
    dynamic dArg2 = (dynamic)arg2;
    dynamic ret;
    try
    {
        ret = dArg1 - dArg2;
        return new Tuple<T, bool>(ret, true);
    }
    catch
    {
        return new Tuple<T, bool>(default(T), false);
    }
}



这是如何工作:首先,你转换参数动态类型,你可以很容易地在动态类型使用的运营商。如果不将能够使用的运营商,则一个异常会在运行时抛出。所以,如果你尝试。减去两个对象,你却不能。减去,我们将捕获异常并返回元组。

这篇关于我怎么能减去两个通用对象(T - T)在C#中(例如:日期时间 - 日期时间)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆