我最近尝试从接受<T>
的方法返回Guid类型的对象,但是编译器给了我以下错误:
类型'System.Guid'不能用作类型参数'T' 泛型类型或方法'MyGenericMethod'。没有拳击 从'System.Guid'转换为'System.IConvertible'。
经过调查,我意识到编译器消息是由于Guid类型没有实现System.IConvertible接口而引起的。
MSDN声明如下:
此接口提供转换实例值的方法 公共语言运行时类型的实现类型 等价值。
提供的类型列表不包括Guid;任何人都可以解释/提供一个用例,说明为什么会这样吗?
答案 0 :(得分:13)
答案 1 :(得分:1)
使用System.Guid作为泛型方法的类型参数不是问题,如下面的代码所示。您能否发布MyGenericMethod方法的实现以及调用该方法的代码?
class Program
{
static void Main(string[] args)
{
var test = new GenericTest();
test.MyGenericMethod(Guid.NewGuid());
}
}
class GenericTest
{
public void MyGenericMethod<T>(T t)
{
}
}
我猜测方法实现有一个类型约束,要求type参数是IConvertible,因此看起来如下所示。
class Program
{
static void Main(string[] args)
{
var test = new GenericTest();
test.MyGenericMethod(Guid.NewGuid());
}
}
class GenericTest
{
public void MyGenericMethod<T>(T t)
where T : IConvertible
{
}
}