在这个通用的“类”中:
public class Param<ValueType>{
public ValueType value;
}
什么时候ValueType
是string
我希望value
所有新创建的类实例都不为空,而无需通过构造函数显式传递默认值。在我的情况ValueType
只能是int
,float
,bool
,string
或struct
(这并不需要执行)。
我怎样才能做到这一点?
当我尝试这样做时:
public class Param<ValueType> where ValueType: new(){
public ValueType value = new ValueType();
}
类停止接受字符串。
移除new()约束后,我将无法再使用new ValueType()
(显然),并且value
对于的所有新实例均为null Param<string>
。
我该怎么办?
我之所以希望这种情况发生,是因为我.Equals()
定义了which value.Equals(other.value)
,当value
null为null时会引发异常。
你可以:
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
它才会成立(因此永远不会发生)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句