Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';在c#中,可为null的int作为字符串是否为null?_C# - Fatal编程技术网

为什么可以';在c#中,可为null的int作为字符串是否为null?

为什么可以';在c#中,可为null的int作为字符串是否为null?,c#,C#,由于某种原因,unknownvisualstudio告诉我无法访问此代码: int? newInt = null; string test = newInt.ToString(); if (test == null) { //unreachable Code } 谢谢你的帮助!:) 如果将测试转换为字符串,则测试永远不会为空。当您转换它时,它将

由于某种原因,unknown
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))"