为什么不这样?:运算符返回null?

时间:2012-08-28 23:21:09

标签: c# null operators conditional-statements

我编写了这行代码来处理空值,但是当expectItem为null时,每当我运行这行代码时,我仍然会得到“对象引用未设置为对象的实例”错误。是什么赋予了?写这个的正确方法是什么? 由于expectedItem为null,我希望expectedItem.ExpectedResultAmount也为null,因此该语句应该为x分配一个空字符串。

string x = expectedItem.ExpectedResultAmount != null ? expectedItem.ExpectedResultAmount : "";

9 个答案:

答案 0 :(得分:3)

您需要检查expectedItem是否为空,而不是其属性

string x = expectedItem != null ? expectedItem.ExpectedResultAmount : "";

答案 1 :(得分:1)

你的期望是错误的。尝试

string x = expectedItem == null ? "" : expectedItem.ExpectedResultAmount != null ? expectedItem.ExpectedResultAmount : "";

答案 2 :(得分:1)

expcetedItem无疑是null:

string x;

if (expectedItem != null)
    x = expectedItem.ExpectedResultAmount != null ? expectedItem.ExpectedResultAmount : "";

答案 3 :(得分:1)

简短回答:您要取消引用expectedItem,因为您正在检查expectedItem.ExpectedResultAmount是否为空,而不是检查expectedItem本身。你应该写

string x = expectedItem != null ? expectedItem.ExpectedResultAmount : "";

答案 4 :(得分:1)

您应该检查对象实例(expectedItem)和属性(expectedItem.ExpectedResultAmount),否则可能会失败:

string x = expectedItem != null && expectedItem.ExpectedResultAmount != null ? expectedItem.ExpectedResultAmount : "";

答案 5 :(得分:0)

expectedItem为空。

if( expectedItem != null)
  x = expectedItem.ExpectedResultAmount != null ? expectedItem.ExpectedResultAmount : "";
else 
  x = "poop";

答案 6 :(得分:0)

试试这个

string x = expectedItem != null && expectedItem.ExpectedResultAmount != null
    ? expectedItem.ExpectedResultAmount
    : string.Empty;

答案 7 :(得分:0)

编写代码的正确方法如下:

string x = expectedItem != null ? (expectedItem.ExpectedResultAmount != null ? expectedItem.ExpectedResultAmount : "") : "";

首先必须确保expectedItem不为null,如果是,则会有一个名为null pointer的非法操作;然后你应该为 x 分配一个空字符串。

如果它不是null,你就像这样写

string x = expectedItem != null ? expectedItem.ExpectedResultAmount : "";

x可以是null或 expectedItem.ExpectedResultAmount ,如果您不希望 x 为null,例如,您将在以后对其进行字符串操作,例如作为Compare或Concat,您还应该确保其成员ExpectedResultAmount也不为空。

答案 8 :(得分:0)

有人建议接受的答案是“眼睛不容易”,你也可以考虑这个:

string x = ""; //string is empty...
if (expectedItem != null && expectedItem.ExpectedResultAmount != null)
{
    x = expectedItem.ExpectedResultAmount; //...unless this exists.
}