我在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”位,也不会造成混淆。

10-06 06:27