如何使用不明确的泛型参数调用构造函数?
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:是的,这很好 - 希望我能想到:)