为什么可以';在c#中,可为null的int作为字符串是否为null?
由于某种原因,unknown为什么可以';在c#中,可为null的int作为字符串是否为null?,c#,C#,由于某种原因,unknownvisualstudio告诉我无法访问此代码: int? newInt = null; string test = newInt.ToString(); if (test == null) { //unreachable Code } 谢谢你的帮助!:) 如果将测试转换为字符串,则测试永远不会为空。当您转换它时,它将
visualstudio
告诉我无法访问此代码:
int? newInt = null;
string test = newInt.ToString();
if (test == null)
{
//unreachable Code
}
谢谢你的帮助!:)
如果将测试转换为字符串
,则测试永远不会为空。当您转换它时,它将成为空字符串
int? newInt = null;
string test = newInt.ToString();
if (test == "")
{
Console.WriteLine("Hello World"); //Reaches the code
}
因为:
((int?)null).ToString()==string.Empty
可为null的int返回值是空字符串。if块中的代码确实在检查一个永远不可能存在的空值。这仅仅是因为int?
是一种框架类型,并且ToString()
的行为是已知的和不可变的。如果在用户定义的值类型上尝试此操作,则无法进行相同的断言。.ToString()
不能允许空值
您可以使用:
convert.ToString(newInt)
通过以下方式检查状况:
"string.IsNullOrEmpty(test))"
试着运行它,看看
test
设置了什么。但是,如果执行了newInt?.ToString()
,则test
将为null
。事实上,您可能会问为什么它不抛出null引用异常,这有点有趣。使用if(string.IsNullOrEmpty(test))而不是文档中的状态,说明如果HasValue
为false
(当您将Nullable
设置为null
时,它返回空字符串)如果你做int?intNex=新的int()
那么它将是0
@MikaelPuusaari您没有将它转换为字符串。您正在调用一个方法,ToString
,该方法可以在其实现中执行它想要的任何操作Nullable
碰巧选择打印一个没有值的空字符串。@Servy,你不能从int
或int?
转换到string
@Prajwal自己试试看。@MikaelPuusaari我知道你不能将int
转换成字符串。这就是为什么我在第一次评论中告诉你不能将int
转换为string
,当时你声称int?
转换为string
。它可以。没有。如果设计师已经决定这是他们想要做的,那么没有什么可以阻止它返回null
。
"string.IsNullOrEmpty(test))"