我希望能够检查值是否是其值类型的默认值.理想情况下,我想说:
DoSomething<TValue>(TValue value) {
if (value == default(TValue)) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器抱怨它无法==
在TValue和TValue上进行比较.这是我迄今为止提出的最好的解决方法:
DoSomething<TValue>(TValue value) {
if (value == null || value.Equals(default(TValue))) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅/正确的方法来解决这个问题?
Bry*_*tts 39
public bool EqualsDefaultValue<T>(T value)
{
return EqualityComparer<T>.Default.Equals(value, default(T));
}
Run Code Online (Sandbox Code Playgroud)
加入类约束,它应该可以工作。
public void Test<T>(T instance) where T : class
{
if (instance == default(T))
{
}
}
Run Code Online (Sandbox Code Playgroud)
或者如果你只想要值类型,你可以这样做。
public void Test<T>(T instance) where T : struct, IEquatable<T>
{
if (instance.Equals(default(T)))
{
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6712 次 |
最近记录: |