对象初始值设定项中成员初始值设定项的顺序是否确定?

时间:2015-02-27 21:30:21

标签: c#

我最近在应用程序中遇到了相同的代码:

var source = new List<string>();
source.AddRange(getSomeListData());

var index = source.Count > 10 ? source.Count - 10 : 0;
var target = new TargetObject
{
    Line1 = source.Count > index ? source[index++] : string.Empty,
    Line2 = source.Count > index ? source[index++] : string.Empty,
    Line3 = source.Count > index ? source[index++] : string.Empty,
    Line4 = source.Count > index ? source[index++] : string.Empty,
    .
    .
    .
}

这里的目标是在输出对象中包含来自源数据的 last 10项(在我们的例子中,最后一行是至关重要的)。但我们不知道会有多少行数据 - 可能只有1行。

此代码目前正常,因为VS2013以源代码顺序运行成员初始值设定项,因此每个index++的副作用按正确的顺序发生。但是,我通读了C#5规范,我无法保证这一切都是真的。这些成员初始化的顺序是否具有确定性,或者上述代码是否会在VS和/或其他C#编译器的某些未来版本中破坏?

(如果存在风险,我现在有机会更改它,但我不想仅仅为了改变而更改代码。)

0 个答案:

没有答案