C#中的null简写?

4 c# null

有没有办法缩短这条线?

bool pass = d != null && d["k"] != null && (bool)d["k"];
Run Code Online (Sandbox Code Playgroud)

注意:"k"实际上是"更长的id"; 我替换它以使其在这篇文章中更具可读性.您的许多建议都不会检查d是否为空.

And*_*ech 32

它已经几乎无法读取,为什么要缩短它?

  • 同意.如果它应该更长,或者至少使用更好的变量和索引名称. (4认同)
  • 连接在哪里?缩短可能会*提高*可读性.比较`x == null?"foo":x`到`x ?? "富"`.简短==(可能)简洁. (2认同)

Ant*_*lev 13

试试这个:

bool pass = d != null && (bool)(d["k"] ?? false);
Run Code Online (Sandbox Code Playgroud)

  • Jan,如果Anton的代码崩溃,那么原始代码也是如此.这不是演习的重点. (3认同)
  • @Jan不,它没有.如果d ["k"]返回null,则右侧为?? operator("false")转换为bool. (2认同)

Sim*_*ens 8

我会问你为什么要缩短它.

较短的代码不会使任何人受益.它让其他人更难阅读它.

就个人而言,我会问"如何让这段代码更容易阅读",答案就是把它分成多行,每行只做一件事.

C#中唯一可用的"空缩写"是null-coalescing运算符,它允许您为null对象定义默认值.但对于您的代码,我建议您的目标是可读性,而不是行大小.


Ste*_*unn 5

是的,从中提取一个函数并调用它doTheValuesInTheFooBarDictionaryPassTheRebarTest.

这更容易阅读.当然,该方法仍将包含您的上述行,但代码的读者(从此处直到时间结束)在浏览代码时将获得更愉快的体验.

通过缩短代码,您希望实现什么?更快阅读?(大脑需要更长的时间来解析它!).输入更快?(你输入一次这个东西,然后一次又一次地修改或读取它(再次!)).通常,更长,更具描述性的变量更好,如果您可以将它们包装在封装方法中,那么也可以这样做.