I have the following generic class:
class Foo<T>
{
//Constructor A
public Foo(string str)
{
Console.Write("A");
}
//Constructor B
public Foo(T obj)
{
Console.Write("B");
}
}
I want to create an instance of this class with T being a string
, using constructor B.
Calling new Foo<string>("Hello")
uses constructor A. How can I call constructor B (without using reflection)?
Since the two constructors use different names for the arguments, you can specify the name of the argument to choose the constructor to use:
new Foo<string>(str: "Test"); // Uses constructor A
new Foo<string>(obj: "Test"); // Uses constructor B
It's horrible, but you could use a local generic method:
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);
}
You could add that as a utility method anywhere, mind you:
public static class FooHelpers
{
public static Foo<T> CreateFoo<T>(T value) => new Foo(value);
}
(I'd prefer the local method because this feels like it's rarely an issue.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With