问题标签 [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.
c# - 如何将 DateTime.TryParse 与 Nullable 一起使用?
我想使用 DateTime.TryParse 方法将字符串的日期时间值转换为 Nullable。但是当我尝试这个时:
编译器告诉我
'out' 参数未被归类为变量
不知道我需要在这里做什么。我也试过:
这也不起作用。有任何想法吗?
.net - .NET 带反射的动态对象
如何通过反射确定 aNullable(of Enum)
是否确实是a ?Enum
我正在使用一种方法,该方法使用从数据库调用中检索到的类型动态填充类型的T
对象IDataReader
。从本质上讲,它循环遍历数据读取器的序数,T
并填充与序数名称匹配的属性(也抛出了一些属性魔术来更改列名)。在所有其他情况下,它都很好用,但是当我检查属性时BaseType
,System.Enum
我发现,System.ValueType
因此,我的枚举检查失败并且方法炸弹。
[编辑:
Type.IsEnum
不起作用我需要它。这里的主要问题是T
BaseType 层次结构中没有任何内容表明它是Enum
. 就好像让它成为一种Nullable
类型就失去了我的Enum
权利。]
有任何想法吗?
c# - 为什么这段代码在 C# 中无效?
以下代码将无法编译:
我得到:错误 1 条件表达式的类型无法确定,因为 'System.DBNull' 和 'string' 之间没有隐式转换
要解决此问题,我必须执行以下操作:
这个演员表似乎毫无意义,因为这当然是合法的:
在我看来,当三元分支是不同类型时,编译器不会将值自动装箱到类型对象......但是当它们是相同类型时,自动装箱是自动的。
在我看来,第一个声明应该是合法的......
谁能描述为什么编译器不允许这样做以及为什么 C# 的设计者选择这样做?我相信这在 Java 中是合法的......虽然我还没有验证这一点。
谢谢。
编辑:我要求了解为什么 Java 和 C# 以不同的方式处理这个问题,C# 中的幕后发生了什么使这无效。我知道如何使用三元,并且不是在寻找一种“更好的方式”来编写示例。我了解 C# 中三进制的规则,但我想知道为什么...
编辑(乔恩斯基特):删除“自动装箱”标签,因为此问题不涉及装箱。
c# - 将结构变量初始化为 Nullable
有没有办法在 c# 中将变量声明为 Nullable?
c# - 可为空的 GUID
在我的数据库中,在其中一个表中,我有一个允许空值的 GUID 列。我有一个指导方法?在表中插入新数据行的参数。但是,当我说 myNewRow.myGuidColumn = myGuid 时,我收到以下错误:“无法隐式转换类型'System.Guid?' 到‘System.Guid’。”
c# - C# ADO.NET:null 和 DbNull——有更高效的语法吗?
我有一个DateTime?
我正在尝试使用DbParameter
. 我正在像这样创建参数:
然后我想把 s 的值DateTime?
放入dataPrm.Value
while 占null
s。
起初我以为我会很聪明:
但这因错误而失败
操作员 '??' 不能应用于“System.DateTime?”类型的操作数?和'System.DBNull'
所以我猜这只有在第二个参数是第一个参数的不可空版本时才有效。所以我去了:
但这也不起作用:
无法确定条件表达式的类型,因为 'System.DateTime' 和 'System.DBNull' 之间没有隐式转换
但我不想在这些类型之间进行转换!
到目前为止,我唯一可以开始工作的是:
这真的是我写这篇文章的唯一方法吗?有没有办法让使用三元运算符的单线工作?
更新:我真的不明白为什么?版本不起作用。MSDN 说:
这 ??运算符如果不为空则返回左操作数,否则返回右操作数。
这正是我想要的!
Update2:嗯,最后很明显:
c# - 在 C# 中,为什么条件运算符不能隐式转换为可空类型
我很好奇为什么隐式强制转换失败...
以及为什么我必须执行显式转换
在我看来,编译器拥有做出隐式转换决定所需的所有信息,不是吗?
vb.net - VB.NET Nullable 语法的历史
我找不到明确的答案。从 C# 2.0 开始,您已经能够声明
作为简写
我记得在某处读到 VB.NET 不允许此快捷方式。但是,瞧,我今天在 VS 2008 中尝试过它并且它有效。
有谁知道自 .NET 2.0 以来是这种方式还是后来添加的?
c# - 在 C# 中使用可为空的类型
我只是对人们的意见感兴趣。在 C# 中使用可为空的类型时,测试 null 的最佳实践方法是什么:
或者
此外,当分配给非空类型时:
优于:
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
您所期望的。