c# - 通用类型函数 : return a non-nullable value

标签 c# generics nullable default-value non-nullable

我写了这个简单的实用函数:

public static T isNull<T>(T? v, T d)
{
    return v == null ? d : v.Value;
}

目的是避免烦人的任务,例如检查成员是否为空,这在读取 linq 记录集时很常见。问题是它抛出了这个错误:

The type 'T' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable< T>'

错误似乎是合法的,无论如何我希望我能做这样的事情:

int? myField = record.myField;
int  myValue = isNull(myField, 0);

代替:

int? myField = record.myField;
int  myValue = myField == null ? 0 : myField.Value;

我觉得我缺少一些 c# 基础知识。是否存在完成我的任务的方法?

最佳答案

Generic constraints 可用于泛型函数以限制允许用于某些子集的类型,这为您如何在方法或类中使用这些类型开辟了可能性。

在这种情况下,您可以对 T 应用约束,将其限制为 struct 以解决特定的编译器错误。

public static T IsNull<T>(T? v, T d) where T : struct
{
    return v == null ? d : v.Value;
}

但是,另一个答案确实正确地指出您可以选择在这种特定 情况下使用空合并运算符??

关于c# - 通用类型函数 : return a non-nullable value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15696120/

相关文章:

generics - 可空类型的 Scala 泛型约束如何工作

C#:可空结构的默认文字和类型推断

c# - HttpClient 发布到 api,获取 System.IO.IOException : Authentication failed because the remote party has closed the transport stream

swift - 在 Swift 中,类型(不是实例)可以符合协议(protocol)吗?

c# - 查询机器规范

c# - 将通用列表转换为 CSV 字符串

C# 通用问题

c# - 使用泛型类型的可空属性的泛型类

c# - 警告 : Only got partial types from assembly: Microsoft. Azure.WebJobs.Extensions.Storage

javascript - 如何将此 Javascript 函数返回到 HiddenField C# 对象中?