gpt4 book ai didi

C# 泛型——推断静态工厂成员的类型

转载 作者:行者123 更新时间:2023-11-30 19:38:48 24 4
gpt4 key购买 nike

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

例如,这是我想使用的通用类,带有静态工厂成员:

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);
}
}

如果我尝试以下不编译:

    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");
}
}

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

为什么我不能对静态成员执行以下操作?

    public void ICanInferTheType<T1>(T1 item);

public void returnResult4()
{
ICanInferTheType("Compiles, recognizes type string");
}

谢谢-

最佳答案

通用推理只发生在方法调用中。在您的情况下,您需要它来引用一个类。鉴于 class GenericClass<T> { ... } , 任何对 GenericClass 的引用没有类型参数是编译错误。唯一可以推断泛型参数的是在方法签名上声明的泛型参数。

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

public static class GenericClass {
// static factory method
public static GenericClass<T> StaticFactory<T>(T resultData) {
return new GenericClass<T>(resultData);
}
}

关于C# 泛型——推断静态工厂成员的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31195524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com