在泛型类型的构造函数中使用C#params关键字

six*_*wns 8 .net c# c#-3.0

我在C#中有一个带有2个构造函数的泛型类:

public Houses(params T[] InitialiseElements)
{}
public Houses(int Num, T DefaultValue)
{}
Run Code Online (Sandbox Code Playgroud)

使用int作为泛型类型构造对象并传入两个int作为参数会导致调用"不正确"的构造函数(从我的角度来看).

例如Houses<int> houses = new Houses<int>(1,2)- 打电话给第二个construtor.将任何其他数量的int传递给构造函数将调用第一个构造函数.

除了删除params关键字并强制用户在使用第一个构造函数时传递T数组,还有什么方法吗?

Jon*_*eet 15

更清晰的解决方案是拥有两种静态工厂方法.如果将这些放入非泛型类中,您还可以从类型推断中受益:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

调用示例:

Houses<string> x = Houses.CreateFromDefault(10, "hi");
Houses<int> y = Houses.CreateFromElements(20, 30, 40);
Run Code Online (Sandbox Code Playgroud)

然后你的泛型类型的构造函数不需要"params"位,并且不会有混淆.