2017-08-25 12 views
-5
string greeting = "";  
foreach (System.Collections.Generic.ICollection<object> x in greetingRecommendation.Resolution.Values) 
    { 
      foreach (var y in x) 
      { 
       greeting = (string)y; 
      } 
    } 

「greetingRecommendation.Resolution.Values」内にある「Good Morning」の値を取得する必要があります。上記のように(foreachを使用して)、その作業を行いました。しかし、その単一の値にアクセスするより良い方法があります。 enter image description hereICollection内の値にアクセスする

+0

あなたが投稿する前にあなたの質問への回答を検索してみてくださいましたか?あなたの質問は簡単です。 –

+0

私はいくつかのGoogleを行い、ICollectionにElementAtメソッドがあることがわかりました。もしあなたがアクセスしたい値のインデックスを知っていれば、ElementAtメソッドを呼び出すことができます。これは、foreachループを使用して、より迅速に値を返すと仮定します。拡張メソッドであることに注意してください。 –

+0

私はElementAtを使用しようとしました。利用可能な方法はありません –

答えて

1

LINQを使用すると、コレクションを簡単に照会できます。今、私たちは次のように特定のインデックスで、最初の最後またはアイテムを抽出することができ

var objCollection = (ICollection<object>) new List<object> 
{ 
    "Good Morning", 
    "Good Afternoon", 
    "Good Night" 
}; 

はのは、一例として、次のコレクションを見てみましょう

var firstItem = objCollection.First(); // returns "Good Morning" 
var lastItem = objCollection.Last(); // returns "Good Night" 
var itemAtIndex1 = objCollection.ElementAt(1); // returns "Good Afternoon" 

もありOrDefault前のすべての変種。その違いは、objCollectionにアイテムがない場合、は例外をスローしますが、FirstOrDefaultは、にアイテムがない場合はdefault(object)(途中でnull)を返します。例を置くため

、これはOrDefault変異体がどのように使用できるかです:greetingRecommendation.Resolution.Valuesのシナリオでは

var firstItem = objCollection.FirstOrDefault(); // returns "Good Morning" 
var lastItem = objCollection.LastOrDefault(); // returns "Good Night" 
var itemAtIndex99 = objCollection.ElementAtOrDefault(99); // returns null, because `objCollection` has only three items and the index 99 doesn't exist on it 

、次のようなものは、コレクションの最初の項目を取得するために使用することができます。

var greeting = greetingRecommendation.Resolution.Values.FirstOrDefault() as string;

ValuesプロパティのタイプがICollection<object>であるとします。

その行がそれを保証します:

  • Values宿泊施設にはアイテムを持っていない場合は、例外がスローされません、とdefault(object)が返されます。
  • にキャストできない値が含まれていると問題を避けるため、Valuesの最初の項目はstringに安全にキャストされます。値をキャストできない場合は、default(string)(これはnull)が返されます。
  • 変数greetingにはnullまたはstringのいずれかが含まれ、最初の値はValuesです。

LINQを使用できるようにするには、usingディレクティブにusing System.Linq;を追加することを忘れないでください。

私はアクションで、このようなLINQの操作を見るために、以下のリンクでの.NETフィドルを用意しました:

関連する問題