【发布时间】:2015-07-15 17:14:05
【问题描述】:
我有一个接受参数T 的扩展方法。该参数为数值类型,为以下之一:byte、short、int、long。
我需要检查T 是否等于0。怎么可能呢?
public static void WriteFlaggedValue<T>(this OutPacket outPacket, uint flag, T value, ref uint outputFlag) where T : struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T>,
IFormattable
{
if (value == 0)
{
}
}
【问题讨论】:
-
看来你会想要this检查。
-
我认为没有任何内置支持可以强制 T 为数字,这可能是个坏主意。但你不能只做
if(value ==(T)0)吗?如果您只有 4 种可能的类型,我可能会建议只为每种类型进行重载。 -
你应该如何强制
T是byte, short, int and long?泛型似乎不是正确的方法。也许超载更适合 -
您可以使用 typeof() 并检查它的数字类型。如果不是你想要的,则抛出异常。
-
@tdbeckett 虽然这是真的,但与 4 次重载相比,我仍然认为这种方法相当草率。使用该方法,您最终会遇到运行时错误而不是编译时错误。
标签: c#