相关疑难解决方法(0)

Nullable <int>是"预定义值类型" - 或者Equals()和==如何在这里工作?

对于我自己实现的Equals()方法,我想检查一堆内部字段.我是这样做的:

...
_myNullableInt == obj._myNullableInt &&
_myString == obj._myString &&
...
Run Code Online (Sandbox Code Playgroud)

我假设,这比较值,包括null,对于相等而不是对象地址(作为参考euqality比较操作),因为:

对于此MSDN文档中的 "预定义值类型" ,可以这样说.我假设Nullable<int>是这样一个"预定义的值类型",因为System根据这个MSDN文档,它在命名空间中.

我是否正确地假设VALUES在这里进行比较?

注意:单元测试显示"是",但我希望其他人对这个问题感到放心,以防我错过了什么.

.net c# nullable value-type string-comparison

27
推荐指数
2
解决办法
915
查看次数

Nullable <T>类型如何在幕后工作?

我很想知道Nullable类型如何在幕后工作.它是否正在创建一个新对象(对象可以赋值为null),其值可能为null?

在我们使用Nullable <int>的例子中,当你为它赋值空值时,它们是从对象到int的某种隐式转换,反之亦然?

另外我知道如何手动创建它,使用Nullable类型是否有好处,而不是自己创建它?

.net c#

13
推荐指数
3
解决办法
1771
查看次数

可空类型和赋值运算符

我一直认为.NET框架的可空类型只是框架给我们的一个很好的构造,但并没有添加到语言本身的任何新东西.

也就是说,直到今天,为了演示,我尝试创建自己的Nullable结构.

我得到了我需要的一切,除了这样做的能力:

var myInt = new Nullable<int>(1);
myInt = 1;
Run Code Online (Sandbox Code Playgroud)

问题是第二个语句,因为我不能以任何方式重载赋值运算符.

我的问题是:这是一个特殊情况,在赋值运算符有过载的语言中?如果没有,你会如何使之前的例子有效?

谢谢!

.net c# nullable operator-overloading assignment-operator

4
推荐指数
2
解决办法
844
查看次数

Nullable&lt;bool&gt; 的 null 否定

null在否定 .c#的值的情况下,我对 c# 编译器感到困惑bool?。编译器确实将其解释!nullnull. 我的期望是提高

CS0266(无法将类型“bool?”隐式转换为“bool”)

示例代码:

bool? nullableVal = null;

//if (nullableVal)  //OK: CS0266 bool? can't be converted to bool
//    ;
var expectCS0266 = !nullableVal;//No compiler error/warning

//if ((!null) ?? false)//OK: CS8310 Operator '!' cannot be applied to operands of type "<NULL>"
//    ;

if (! nullableVal ?? false)
    ;//this statement isn't reached, because of precedence of ! is higher than ??
    //and !null == null

if (!(nullableVal ?? false))
    ;//this …
Run Code Online (Sandbox Code Playgroud)

c# compiler-errors logical-operators

1
推荐指数
1
解决办法
1052
查看次数