请为我破译这个 C# 表达式

本文关键字:表达式 | 更新日期: 2023-09-27 18:33:59

这是什么意思??

var cdParams = (includeUniversals) 
? new[] {pageDictionary[pageName], pageDictionary[CNNService.UniversalPage.Name]}
: new[] {pageDictionary[pageName]};

基本上它归结为什么?是什么意思,new[]是什么意思?

请为我破译这个 C# 表达式

它大致相当于这个:

Foo[] cdParams;  // Use the correct type instead of Foo. NB: var won't work here.
if (includeUniversals) { 
    dParams = new Foo[2];
    dParams[0] = pageDictionary[pageName];
    dParams[1] = pageDictionary[CNNService.UniversalPage.Name];
} else {
    dParams = new Foo[1];
    dParams[0] = pageDictionary[pageName];
}
这是一个

三元表达式。 如果条件为 true,则执行第一种情况。 如果为 false,则执行第二种情况。

如果布尔includeUniversals的计算结果为 true,则返回一个包含 pageDictionary[pageName] 的新匿名对象数组,否则pageDictionary[CNNService.UniversalPage.Name]返回一个新的匿名对象数组,其中包含pageDictionary[pageName]

你要找什么?

var cdParams // type inferred by the compiler
 = (includeUniversals) ? // if includeUniversals is true
// then cdParams = new a new array with 2 values coming from a dictionary
 new[] { pageDictionary[pageName], pageDictionary[CNNService.UniversalPage.Name] }
// otherwise, cdParams = a new array with one value
: new[] { pageDictionary[pageName] };

请参阅三元运算符和隐式数组类型。

根据includeUniversalscdParams将是一个包含两个值的数组,即 pageDictionary[pageName]pageDictionary[CNNService.UniversalPage.Name] - 或者,它将是一个包含一个值的数组,即 pageDictionary[pageName]