我最近尝试从接受<T>
的方法返回类型GUID的对象,但是编译器给了我以下错误:
类型'System.Guid'不能用作类型参数'T't' 通用类型或方法" mygenericMethod"。没有拳击 从'System.Guid'转换为'System.Iconvertible'。
调查后,我意识到编译器消息是由于无法实现系统的GUID类型引起的。
MSDN指出以下内容:
此接口提供了转换一个实例值的方法 实现类型的通用语言运行时类型,该类型具有 等效值。
提供的类型列表不包括GUID;谁能解释/提供有关为什么会这种情况的用例?
Iconvertible要求类型能够将其数据转换为大多数原语。例如,您将如何代表GUID作为浮点?
由于GUID无法实施大多数接口方法,因此预计不会声明自己。
现在在一个真正的问题上:您要完成什么?
使用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)
{
}
}
我猜想该方法实现具有类型约束,需要类型参数具有偶像性,因此看起来像以下内容。
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
{
}
}