有没有办法限制T的输入以便能够为函数参数添加默认值?
public class Identity<T>
{
public readonly T Seed;
public readonly T Increment;
public Identity(T seed = 1, T increment = 1)
{
Seed = seed;
Increment = increment;
}
}
我希望能够做T seed = 1
并且可能将T限制为非十进制数字类型,如short,int,long ......
答案 0 :(得分:1)
您只能设置可在编译时评估的“默认”值,并且可以转换为T的所有可能值。一个示例是使用default
:
public void Add(T parent = default(T))
{
....
}
哪种情况不适用于您的情况,除非您想将“0”视为“魔术”案例并将其视为“1”。但是如何在不将T限制为数值的情况下实现它? (你也不能用泛型)
答案 1 :(得分:0)
实际问题是(可能)根本没有办法为T类型的参数指定默认值。
IF 你可以做到(我不记得了),而不是 指定:
T param1 = null // for T: class
T param1 = default(T) // for T: any
// T param1 = new T() // for T: new() -- cannot be possible, see Servy's comment
因为没有其他“构造函数”可用于泛型类型参数T!
编译器将T
视为没有操作且没有构造函数的对象,除了where
子句和/或总是从{{1}继承的子句之外没有强制转换/转换}。由于您只能指定上述操作/要求..我认为无法完成。泛型不是C ++模板;)