如何使用不明确的泛型参数调用构造函数?

c#

我有以下通用类:

class Foo<T>
{
    //Constructor A
    public Foo(string str)
    {
        Console.Write("A");
    }

    //Constructor B
    public Foo(T obj)
    {
        Console.Write("B");
    }
}

我想string使用构造函数 B创建此类的一个实例,其中 T 为 a 。

调用new Foo<string>("Hello")使用构造函数 A。如何调用构造函数 B(不使用反射)?

回答

由于两个构造函数对参数使用不同的名称,您可以指定参数名称来选择要使用的构造函数:

new Foo<string>(str: "Test"); // Uses constructor A

new Foo<string>(obj: "Test"); // Uses constructor B


回答

这很可怕,但您可以使用本地通用方法:

public void RealMethod()
{
    // This is where I want to be able to call new Foo<string>("Hello")

    Foo<string> foo = CreateFoo<string>("Hello");

    CreateFoo<T>(T value) => new Foo(value);
}

您可以在任何地方将其添加为实用方法,请注意:

public static class FooHelpers
{
    public static Foo<T> CreateFoo<T>(T value) => new Foo(value);
}

(我更喜欢本地方法,因为这感觉很少有问题。)

  • @Bip901:是的,这很好 - 希望我能想到:)

以上是如何使用不明确的泛型参数调用构造函数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>