问题标签 [nullable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
110673 浏览

c# - 如何将 DateTime.TryParse 与 Nullable 一起使用?

我想使用 DateTime.TryParse 方法将字符串的日期时间值转换为 Nullable。但是当我尝试这个时:

编译器告诉我

'out' 参数未被归类为变量

不知道我需要在这里做什么。我也试过:

这也不起作用。有任何想法吗?

0 投票
4 回答
1352 浏览

.net - .NET 带反射的动态对象

如何通过反射确定 aNullable(of Enum)是否确实是a ?Enum

我正在使用一种方法,该方法使用从数据库调用中检索到的类型动态填充类型的T对象IDataReader。从本质上讲,它循环遍历数据读取器的序数,T并填充与序数名称匹配的属性(也抛出了一些属性魔术来更改列名)。在所有其他情况下,它都很好用,但是当我检查属性时BaseTypeSystem.Enum我发现,System.ValueType 因此,我的枚举检查失败并且方法炸弹。

[编辑: Type.IsEnum不起作用我需要它。这里的主要问题是TBaseType 层次结构中没有任何内容表明它是Enum. 就好像让它成为一种Nullable类型就失去了我的Enum权利。]

有任何想法吗?

0 投票
3 回答
13119 浏览

c# - 为什么这段代码在 C# 中无效?

以下代码将无法编译:

我得到:错误 1 ​​条件表达式的类型无法确定,因为 'System.DBNull' 和 'string' 之间没有隐式转换

要解决此问题,我必须执行以下操作:

这个演员表似乎毫无意义,因为这当然是合法的:

在我看来,当三元分支是不同类型时,编译器不会将值自动装箱到类型对象......但是当它们是相同类型时,自动装箱是自动的。

在我看来,第一个声明应该是合法的......

谁能描述为什么编译器不允许这样做以及为什么 C# 的设计者选择这样做?我相信这在 Java 中是合法的......虽然我还没有验证这一点。

谢谢。

编辑:我要求了解为什么 Java 和 C# 以不同的方式处理这个问题,C# 中的幕后发生了什么使这无效。我知道如何使用三元,并且不是在寻找一种“更好的方式”来编写示例。我了解 C# 中三进制的规则,但我想知道为什么...

编辑(乔恩斯基特):删除“自动装箱”标签,因为此问题不涉及装箱。

0 投票
4 回答
694 浏览

c# - 将结构变量初始化为 Nullable

有没有办法在 c# 中将变量声明为 Nullable?

0 投票
10 回答
53297 浏览

c# - 可为空的 GUID

在我的数据库中,在其中一个表中,我有一个允许空值的 GUID 列。我有一个指导方法?在表中插入新数据行的参数。但是,当我说 myNewRow.myGuidColumn = myGuid 时,我收到以下错误:“无法隐式转换类型'System.Guid?' 到‘System.Guid’。”

0 投票
6 回答
34316 浏览

c# - C# ADO.NET:null 和 DbNull——有更高效的语法吗?

我有一个DateTime?我正在尝试使用DbParameter. 我正在像这样创建参数:

然后我想把 s 的值DateTime?放入dataPrm.Valuewhile 占nulls。

起初我以为我会很聪明:

但这因错误而失败

操作员 '??' 不能应用于“System.DateTime?”类型的操作数?和'System.DBNull'

所以我猜这只有在第二个参数是第一个参数的不可空版本时才有效。所以我去了:

但这也不起作用:

无法确定条件表达式的类型,因为 'System.DateTime' 和 'System.DBNull' 之间没有隐式转换

但我不想在这些类型之间进行转换!

到目前为止,我唯一可以开始工作的是:

这真的是我写这篇文章的唯一方法吗?有没有办法让使用三元运算符的单线工作?

更新:我真的不明白为什么?版本不起作用。MSDN 说:

这 ??运算符如果不为空则返回左操作数,否则返回右操作数。

这正是我想要的!

Update2:嗯,最后很明显:

0 投票
6 回答
13984 浏览

c# - 在 C# 中,为什么条件运算符不能隐式转换为可空类型

我很好奇为什么隐式强制转换失败...

以及为什么我必须执行显式转换

在我看来,编译器拥有做出隐式转换决定所需的所有信息,不是吗?

0 投票
4 回答
5383 浏览

vb.net - VB.NET Nullable 语法的历史

我找不到明确的答案。从 C# 2.0 开始,您已经能够声明

作为简写

我记得在某处读到 VB.NET 不允许此快捷方式。但是,瞧,我今天在 VS 2008 中尝试过它并且它有效。

有谁知道自 .NET 2.0 以来是这种方式还是后来添加的?

0 投票
8 回答
13121 浏览

c# - 在 C# 中使用可为空的类型

我只是对人们的意见感兴趣。在 C# 中使用可为空的类型时,测试 null 的最佳实践方法是什么:

或者

此外,当分配给非空类型时:

优于:

0 投票
7 回答
39685 浏览

php - MySQL中非空列中的空字符串?

我曾经使用标准的 mysql_connect()、mysql_query() 等语句从 PHP 中处理 MySQL 的内容。最近我一直在转而使用美妙的 MDB2 类。除此之外,我还使用准备好的语句,因此我不必担心逃避输入和 SQL 注入攻击。

但是,我遇到了一个问题。我有一个包含几个 VARCHAR 列的表,这些列被指定为非空(即,不允许 NULL 值)。使用旧的 MySQL PHP 命令,我可以毫无问题地做这样的事情:

但是,现在,如果我有这样的查询:

然后在 PHP 中我有:

这将抛出错误“ null value violates not-null constraint

作为临时解决方法,我检查是否$value为空,并将其更改为" "(单个空格),但这是一个可怕的 hack,可能会导致其他问题。

我应该如何使用准备好的语句插入空字符串,而不是尝试插入 NULL?

编辑:这个项目太大了,无法遍历我的整个代码库,找到使用空字符串“”的任何地方并将其更改为使用 NULL。我需要知道的是为什么标准 MySQL 查询将“”和 NULL 视为两个独立的事物(我认为是正确的),但准备好的语句将“”转换为 NULL。

请注意,“”和 NULL不是一回事。例如,SELECT NULL = "";返回NULL而不是1您所期望的。