相关疑难解决方法(0)

Nullable类型作为通用参数可能吗?

我想做这样的事情:

myYear = record.GetValueOrNull<int?>("myYear"),
Run Code Online (Sandbox Code Playgroud)

请注意可空类型作为通用参数.

由于该GetValueOrNull函数可以返回null,我的第一次尝试是这样的:

public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
  where T : class
{
    object columnValue = reader[columnName];

    if (!(columnValue is DBNull))
    {
        return (T)columnValue;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但我现在得到的错误是:

类型'int?' 必须是引用类型才能在泛型类型或方法中将其用作参数"T"

对!Nullable<int>是一个struct!所以我尝试将类约束更改为struct约束(并且副作用不能再返回null):

public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
  where T : struct
Run Code Online (Sandbox Code Playgroud)

现在任务:

myYear = record.GetValueOrNull<int?>("myYear");
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

类型'int?' 必须是非可空值类型才能在泛型类型或方法中将其用作参数"T"

是否可以将可空类型指定为通用参数?

c# generics

268
推荐指数
6
解决办法
19万
查看次数

一切可以为空的C#泛型类型约束

所以我有这门课:

public class Foo<T> where T : ???
{
    private T item;

    public bool IsNull()
    {
        return item == null;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找一种类型约束,允许我将所有内容都用作类型参数null.这意味着所有引用类型以及所有Nullable(T?)类型:

Foo<String> ... = ...
Foo<int?> ... = ...
Run Code Online (Sandbox Code Playgroud)

应该是可能的.

使用class类型约束只允许我使用引用类型.

附加信息: 我正在编写管道和过滤器应用程序,并希望使用null引用作为传递到管道的最后一项,以便每个过滤器可以很好地关闭,进行清理等...

c# generics nullable

102
推荐指数
4
解决办法
5万
查看次数

标签 统计

c# ×2

generics ×2

nullable ×1