【发布时间】:2011-02-14 16:19:00
【问题描述】:
示例 1
假设一个方法决定应该使用哪种方法来转换一个值。
public static TTarget ConvertValue<TTarget>(object value)
{
Type t = typeof(TTarget);
if (t.IsEnum)
return ParseEnum<TTarget>(value);
else //if ...
return ...;
}
一些处理值的方法有一个带有约束的泛型类型参数。
public static TEnum ParseEnum<TEnum>(object value)
where TEnum : struct
{
//do something
return ...;
}
编译器不允许这种方法,因为TTarget 类型不一定是struct,可以变成NULL,因此不能用作TEnum。
示例 2
假设有一个没有约束的泛型方法和一个有附加约束的方法:
public void DoStuff<T>(T obj)
{
if (obj is IComparable && obj is ICloneable)
DoSpecialStuff<T>(obj);
}
public void DoSpecialStuff<T>(T obj)
where T : IComparable, ICloneable
{
}
这也不起作用,因为 (afaik) 无法转换为多个接口。
是否可以重用泛型类型来调用具有附加约束的方法?
【问题讨论】:
标签: c# enums constraints generics