我经常有类似这样的代码:
if (itm != null)
{
foreach (type x in itm.subItems())
{
//dostuff
}
}
//do more stuff
Run Code Online (Sandbox Code Playgroud)
在//do more stuff省略的情况下,很容易避免额外的foreach循环.通过使用适当的命令来扩展范围(取决于正在发生的事情,这通常意味着return声明或a continue statement).
这种类型的东西倾向于产生箭头代码.我目前有几种方法可以解决这个问题:
itm = itm == null ? itm.subItems() : emptyArraygotogoto丑陋和难以阅读,所以我不认为这是一个有效的解决方案.有人关心哪些方法被认为更可取?
Jon*_*eet 15
如果您使用的是C#3,则可以随时编写扩展方法:
public static IEnumerable<SubItem> SafeSubItems(this ItemType item)
{
return item == null ? Enumerable.Empty<SubItem> : source.SubItems();
}
Run Code Online (Sandbox Code Playgroud)
然后写下:
foreach (SubItem x in itm.SafeSubItems())
{
// do stuff
}
// do more stuff
Run Code Online (Sandbox Code Playgroud)
关键是扩展方法甚至可以调用"on"null引用.
什么是好的将是一个"null-safe dereferencing"运算符,所以我们可以写:
// Not valid C# code!
foreach (SubItem x in itm?.SubItems() ?? Enumerable.Empty<SubItem>())
{
}
Run Code Online (Sandbox Code Playgroud)
或者只是定义一个EmptyIfNull扩展方法IEnumerable<T>并使用
// Not valid C# code!
foreach (SubItem x in (itm?.SubItems()).EmptyIfNull())
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3968 次 |
| 最近记录: |