你打算如何使用它?
您提供的代码:
int[] values = null;
foreach (var i in values)
{
// ...
}
扩展为:
int[] values = null;
var enumerator = values.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
var i = enumerator.Current;
// ...
}
}
finally
{
var disposable = enumerator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
我想你可以这样写:
int[] values = null;
foreach (var i in values?.)
{
// ...
}
编译器必须将其扩展为如下内容:
int[] values = null;
var enumerator = values?.GetEnumerator();
try
{
while (enumerator?.MoveNext() ?? false)
{
var i = enumerator.Current;
// ...
}
}
finally
{
var disposable = enumerator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
请记住:
a = b?.M();
扩展为:
a = b == null ? null : b.M();
如果您不想显式编写if
语句,则始终可以依赖旧的空合并运算符 (??):
int[] values = null;
foreach (var i in values ?? Enumerable.Empty<int>())
{
// ...
}