Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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#6.0空合并对我来说不正常_C# - Fatal编程技术网

C#6.0空合并对我来说不正常

C#6.0空合并对我来说不正常,c#,C#,非常简单的问题,下面的代码抛出一个“可空对象必须有值”异常。但我认为??你打算怎么办 string qty = stop.pallets_qty_total.Value.ToString() ?? "0"; 您正在检查调用ToString()后返回的结果是否为nullstop.pallets\u qty\u total属性的Value方法,而stop.pallets\u qty\u total可能为null,也可能是stop本身为null,这也会导致代码失败 您需要使用Null Propo

非常简单的问题,下面的代码抛出一个“可空对象必须有值”异常。但我认为??你打算怎么办

  string qty = stop.pallets_qty_total.Value.ToString() ?? "0";

您正在检查调用
ToString()后返回的结果是否为
null
stop.pallets\u qty\u total
属性的
Value
方法,而
stop.pallets\u qty\u total
可能为
null
,也可能是
stop
本身为
null
,这也会导致代码失败

您需要使用Null Propogation运算符尝试以下操作:

string qty = (stop?.pallets_qty_total?.ToString()) ?? "0";

它只会检查值是否为null,但如果前面的对象为null,则会抛出异常

string qty = stop?.pallets_qty_total?.Value.ToString() ?? "0";

您正在尝试访问
Nullable
的[
Value][1]
属性,但该属性未指定值。正如规范所述,它将抛出异常:

如果尚未将T类型的值指定给可为空的对象, 您可以将其与null进行比较并检索其HasValue属性,但是 无法访问其Value属性或调用其其他成员

这里有两个选项—用于在对象为null时避免访问对象属性:

string qty = stop.pallets_qty_total?.Value.ToString() ?? "0";
或者您可以记住,数值类型的默认值为零。如果未为nullable分配值,则获取默认值:

string qty = stop.pallets_qty_total.GetValueOrDefault().ToString();

这也会很小。

除了Ehsan Sajjad的答案之外,假设
托盘数量总量
是一个整数,这里实际上不需要第二个
。您可以改为使用,如下所示:

 string qty = stop?.pallets_qty_total.GetValueOrDefault().ToString();

如果
pallets\u qty\u total
有一个值,它将返回该值。如果不是,它将返回
default(T)
,在
int
的情况下,它是
0

,尽管注释已经给出了正确的答案,但这里有更详细的解释:

您的判断是正确的,
??
运算符将在其值不为空时接受左操作数。否则将使用正确的操作数。简短版本对于以下各项至关重要:

var qty = input == null ? "0" : input;
但是,分配不会引发异常。调用
ToString()
会引发异常

如果您的输入为
null
,则您的语句等于以下内容:

var qty = ((object)null).ToString();
input != null ? input.ToString() : null
// is equal to
input?.ToString()
这显然会抛出一个
NullReferenceException

解决方案: 您要找的是
?。
操作员。这表示“如果对象不为null,则调用函数”。这将扩展为以下内容:

var qty = ((object)null).ToString();
input != null ? input.ToString() : null
// is equal to
input?.ToString()
因此,分配的解决方案应该是两个运算符的组合:

var qty = input?.ToString() ?? "0"; 

复制到:否,
x??v
大致相当于
x==null?v:x
。你是说
?。
操作员吗?在这种情况下,您应该使用
托盘数量总计?.ToString()??“0”
访问
stop.pallets\u qty\u total.Value
已在
stop.pallets\u qty\u total
为空时引发此异常-因此它甚至没有到达
运算符。@MikhailLobanov-它被称为.Your right,谢谢。当它允许我的时候,我会接受。我知道我应该加载我在写我的答案时发布的答案。