根据通用参数类型实例化一个类

时间:2018-11-15 23:19:28

标签: c# unity3d generics factory

我正在碰壁,找不到解决我问题的方法。

我试图根据我的通用参数的类型来选择要实例化的类。如果泛型是一个类,则实例化一个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#标准比较旧,这无济于事...

0 个答案:

没有答案