Reputation: 808
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)?
Upvotes: 7
Views: 361
Reputation: 28499
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
Upvotes: 13
Reputation: 1500535
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.)
Upvotes: 8