我怎么能减去两个通用对象(T - T)在C#中(例如:日期时间 - 日期时间)? [英] How can I subtract two generic objects (T - T) in C# (Example: DateTime - DateTime)?
本文介绍了我怎么能减去两个通用对象(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屋!
查看全文