相关疑难解决方法(0)

SQL数据读取器 - 处理空列值

我正在使用SQLdatareader从数据库构建POCO.代码工作,除非它在数据库中遇到空值.例如,如果数据库中的FirstName列包含空值,则抛出异常.

employee.FirstName = sqlreader.GetString(indexFirstName);
Run Code Online (Sandbox Code Playgroud)

在这种情况下处理空值的最佳方法是什么?

c# sqldatareader

276
推荐指数
13
解决办法
35万
查看次数

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万
查看次数

为什么Nullable <T>不匹配作为泛型约束的引用类型

可能重复:可以为
Nullable类型作为通用参数?

我遇到了泛型类型约束非常奇怪的事情.我有一个这样的课:

public SomeClass<T> where T:class
{
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现我不能像我期望的那样使用可空类型:

new SomeClass<int?>();
Run Code Online (Sandbox Code Playgroud)

我得到一个int?必须是引用类型的错误.Nullable真的只是一个带有语法糖的结构,使它看起来像一个引用类型吗?

c# generics nullable reference-type generic-constraints

18
推荐指数
1
解决办法
2073
查看次数

在 C# 中,如何将泛型类型参数约束为仅接受可为 null 的值类型?

where T : struct约束仅允许将可接受类型参数的域限制为一组值类型(与包括值和引用类型的类型的超集相比),但似乎也完全禁止可空类型,尽管可空并不一定意味着现代版本的 C# 中的引用类型。

如果我愿意接受的值类型添加了非空一样int?DateTime?等而拒绝本身可空引用类型(如String),IList的等?是否可以通过这种方式定义约束?如果是怎么办?

我实际上很想学习实现这两种场景:当用作参数的类型必须同时是值和可为空时,以及何时接受可空值类型以及不可空值类型,我认为这些相关足以原谅提及两者,所以我很感激对第二个案例的谦虚评论,并选择一个答案,包括它作为更好的答案(假设另一个答案在其他方面不会真的更好),如果不止一个答案将是提交,我必须选择,但我现在真正需要的是第一种情况(总是需要一个既可以为空又是值类型的类型),我也相信第二种情况会鉴于第一个的知识,非常简单,更不用说坚持将两个问题粘在一起并不是一个好办法,所以我绝对会欣赏并接受只处理第一个案例的答案。

c# syntax nullable value-type generic-constraints

4
推荐指数
2
解决办法
2533
查看次数