2012-05-11 5 views
1

これはどういう意味ですか?私のためにこのC#式を解読してください

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

基本的には、それは何に似ていますか?平均と新しい[]はどういう意味ですか?

+5

問題のある部分はどれですか? '? '演算子? 'new []'演算子ですか? –

+0

あなたのcdParamはincludeUniversalsによって異なります。あなたのcdParamは2つの値の配列か、pageDictionaryの値として持っている型の値の1つのみの配列です。 –

答えて

2
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] }; 

ternary operatorimplicit array typingを参照してください。それに一つの値、すなわち、pageDictionary[pageName]と配列であるか、または -

5

ternary expressionです。条件が真であれば、最初のケースを実行します。 falseの場合は、2番目のケースを実行します。

3

ブールincludeUniversalsがtrueに評価される場合、そうでない場合は、あなたが探しているものということpageDictionary[pageName]

含む新しい匿名のオブジェクトの配列を返しpageDictionary[pageName]pageDictionary[CNNService.UniversalPage.Name]を含む新しい匿名のオブジェクトの配列を返しますか?

7

それはこのとほぼ同等です:

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]; 
} 
+0

new []はFooをオブジェクトにします。 –

+1

@PeterLaCombJr .: 'new []'は、型を推定することを意味します。それは 'オブジェクト'ではなく、他の型であるかもしれません。コードをより明示的に更新しました。 –

+0

私はそれに気付かなかったと私の使用法は常にオブジェクト[]になりました。ありがとう。 –

0

includeUniversalsによって、cdParamsは、その中に二つの値を持つ配列、すなわちpageDictionary[pageName]pageDictionary[CNNService.UniversalPage.Name]あろう。