我在C#中有一个具有2个构造函数的泛型类:
public Houses(params T[] InitialiseElements)
{}
public Houses(int Num, T DefaultValue)
{}
使用int作为泛型类型构造一个对象并传入两个int作为参数会导致“不正确”的构造函数被调用(从我的角度来看)。
例如。
Houses<int> houses = new Houses<int>(1,2)
-调用第二个构造函数。将任何其他数量的int传递给构造函数将调用第一个构造函数。除了使用params关键字并在使用第一个构造函数时强制用户传递T数组之外,还有其他解决方法吗?
最佳答案
一个更清晰的解决方案是拥有两种静态工厂方法。如果将它们放入非泛型类中,则还可以从类型推断中受益:
public static class Houses
{
public static Houses<T> CreateFromElements<T>(params T[] initialElements)
{
return new Houses<T>(initialElements);
}
public Houses<T> CreateFromDefault<T>(int count, T defaultValue)
{
return new Houses<T>(count, defaultValue);
}
}
调用示例:
Houses<string> x = Houses.CreateFromDefault(10, "hi");
Houses<int> y = Houses.CreateFromElements(20, 30, 40);
然后,您的泛型类型的构造函数不需要“params”位,也不会造成混淆。