6

我最近尝试从接受的方法返回Guid<T>类型的对象,但是编译器给了我以下错误:

类型“System.Guid”不能用作泛型类型或方法“MyGenericMethod”中的类型参数“T ”。没有从'System.Guid''System.IConvertible' 的装箱转换。

经过调查,我意识到编译器消息是由于 Guid 类型没有实现 System.IConvertible 接口引起的。

MSDN声明如下:

此接口提供将实现类型的实例的值转换为具有等效值的公共语言运行时类型的方法。

提供的类型列表不包括 Guid;谁能解释/提供一个用例来说明为什么会这样?

4

2 回答 2

13

IConvertible要求类型能够将其数据转换为大多数原语。例如,您如何将 Guid 表示为浮点数?

因为 Guid 不能实现大多数接口方法,所以它预计不会以其他方式声明自己。

现在谈谈真正的问题:你想要完成什么?

于 2012-10-25T10:52:11.030 回答
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)
    {
    }
}

我猜该方法实现有一个类型约束,要求类型参数是 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
    {
    }
}
于 2012-10-25T11:00:22.327 回答