为什么System.Guid没有实现System.IConvertible?

时间:2012-10-25 10:46:07

标签: c# clr guid

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

  

类型'System.Guid'不能用作类型参数'T'   泛型类型或方法'MyGenericMethod'。没有拳击   从'System.Guid'转换为'System.IConvertible'

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

MSDN声明如下:

  

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

提供的类型列表不包括Guid;任何人都可以解释/提供一个用例,说明为什么会这样吗?

2 个答案:

答案 0 :(得分:13)

IConvertible要求该类型能够将其数据转换为大多数基元。例如,你如何将Guid表示为浮动?

因为Guid无法实现大多数接口方法,否则它不会声明自己。

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

答案 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
    {
    }
}