我正在碰壁,找不到解决我问题的方法。
我试图根据我的通用参数的类型来选择要实例化的类。如果泛型是一个类,则实例化一个TestClass;如果是结构,则实例化一个TestStruct;如果是枚举,请实例化一个TestEnum。这三个类继承自Test。
这些类的目标是在进行比较时避免装箱。
这是我的代码现在的样子:
public static Test<T> Create()
{
return Create(default(T));
}
private static Test<U> Create<U>(U arg)
where U : class
{
return TestClass<U>.Create();
}
private static Test<U> Create<U>(U? arg)
where U : struct
{
return CreateStruct(arg);
}
private static Test<U> CreateStruct<U>(U? arg)
where U : struct
{
if (typeof(U).IsEnum)
{
return TestEnum<U>.Create();
}
return TestStruct<U>.Create();
}
在第一个Create()函数中出现错误:类型'T'必须是引用类型,才能在通用类型或方法'Test.Create(U)中将其用作参数'U'。 )'
这有道理,但是我如何使它工作呢?如果我取消对第二个函数的约束(其中U:class),它将编译但始终会调用此函数,即使我实例传递了一个int
我使用的是Unity,因此C#标准比较旧,这无济于事...