C#Generics - 推断静态工厂成员的类型

Mau*_*rGi 2 c# generics

我想调用使用泛型的类的静态成员,而不指定类型并让编译器推断它们.

例如,这是我想要使用的泛型类,具有静态工厂成员:

public class GenericClass<T>
{
    public T Member;

    // Constructor
    public GenericClass(T value)
    { 
        Member = value; 
    }

    // static factory method
    public static GenericClass<T> StaticFactory(T resultData) 
    { 
        return new GenericClass<T>(resultData); 
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试以下不编译:

    public class Class1
    {
        public GenericClass<string> returnResult1()
        {
            return GenericClass.StaticFactory("Won't Compile, but it's clear that T is a string");
        }

        public GenericClass returnResult2()
        {
            return GenericClass.StaticFactory("Won't Compile, but it's clear that T is a string");
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误1使用泛型类型'SampleStatic.GenericClass'需要1个类型参数

为什么我不能像静态成员一样喜欢以下内容?

    public void ICanInferTheType<T1>(T1 item);

    public void returnResult4()
    {
        ICanInferTheType("Compiles, recognizes type string");
    }
Run Code Online (Sandbox Code Playgroud)

谢谢 -

rec*_*ive 6

通用推理仅适用于方法调用.在你的情况下,你需要它来引用一个类.给定class GenericClass<T> { ... },GenericClass没有类型参数的任何引用都是编译错误.可以推断通用参数的唯一时间是在方法签名上声明的泛型参数.

但是,无论如何,您都可以实现目标.如果您声明这个额外的类,您将能够以您想要的方式调用该方法.那是因为通用参数被移动到方法中.

public static class GenericClass {
    // static factory method
    public static GenericClass<T> StaticFactory<T>(T resultData) { 
        return new GenericClass<T>(resultData); 
    }
}
Run Code Online (Sandbox Code Playgroud)