相关疑难解决方法(0)

C#可以将值类型与null进行比较

我今天碰到了这个,并且不知道为什么C#编译器没有抛出错误.

Int32 x = 1;
if (x == null)
{
    Console.WriteLine("What the?");
}
Run Code Online (Sandbox Code Playgroud)

我很困惑x怎么可能是null.特别是因为这个赋值肯定会抛出编译器错误:

Int32 x = null;
Run Code Online (Sandbox Code Playgroud)

是否有可能x变为null,微软是否决定不将此检查放入编译器,还是完全错过了?

更新:在编写了这篇文章的代码后,编译器突然发出一个警告,表达式永远不会成立.现在我真的迷路了.我把对象放到一个类中,现在警告已经消失,但是留下了问题,值类型最终是否为null.

public class Test
{
    public DateTime ADate = DateTime.Now;

    public Test ()
    {
        Test test = new Test();
        if (test.ADate == null)
        {
            Console.WriteLine("What the?");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# null

85
推荐指数
3
解决办法
2万
查看次数

如何将对象与null进行比较?

我在一个KeyValuePair方法上有一个'可选'参数.我想要一个将null传递给此参数的核心方法的重载,但是在核心方法中,当我想检查KeyValuePair是否为null时,我收到以下错误:

Operator '!=' cannot be applied to operands of type System.Collections.Generic.KeyValuePair<string,object>' and '<null>. 
Run Code Online (Sandbox Code Playgroud)

如何禁止检查对象是否为空?

.net c# generics

47
推荐指数
3
解决办法
2万
查看次数

为什么null需要显式类型转换?

以下代码无法编译:

//int a = ...
int? b = (int?) (a != 0 ? a : null);
Run Code Online (Sandbox Code Playgroud)

为了编译,需要将其更改为

int? b = (a != 0 ? a : (int?) null);
Run Code Online (Sandbox Code Playgroud)

由于这两个b = nullb = a是合法的,这是没有意义的我.

为什么我们不得不强制null转换为一个int?为什么我们不能简单地为整个表达式提供一个显式类型转换(我知道在其他情况下可能)?

.net c# null casting

21
推荐指数
3
解决办法
2599
查看次数

标签 统计

c# ×3

.net ×2

null ×2

casting ×1

generics ×1