在这个通用"类":
public class Param<ValueType>{
public ValueType value;
}
当ValueType
为string
时,我希望value
对于所有新创建的类实例都是非null,而不通过构造函数显式传递默认值。在我的方案中,ValueType
只能是int
,float
,bool
,string
或struct
(不需要public class Param<ValueType> where ValueType: new(){
public ValueType value = new ValueType();
}
执行)。
我该怎么做?
当我尝试这样做时:
new ValueType()
类停止接受字符串。
当我删除new()约束时,我无法再使用value
(显然),Param<string>
对于.Equals()
的所有新实例都为空。
我该怎么办?
我希望这种情况发生的原因是因为我value.Equals(other.value)
定义了value
,这会导致{{1}}为空时抛出异常。
答案 0 :(得分:3)
你可以:
public class Param<ValueType>
{
public ValueType value = typeof(ValueType) == typeof(string) ? (ValueType)(object)string.Empty : default(ValueType);
}
请注意default(int) == 0
等等。
啊,为了比较,你应该:
bool areEqual = EqualityComparer<ValueType>.Equals(value, other.Value);
它适用于null
值。
即使使用泛型,也请注意:
if (value == null)
{
}
是完全有效的代码。显然,只有当ValueType
可以null
并且null
时才会成立(因此ValueType == int
不会发生这种情况)