2017-02-14 6 views
0

私は、ネストされたリストクラスの値にループを張らずに直接アクセスすることは可能でしょうか? 以下のコードは仕事ですが、私はそれを簡素化したいし、値に直接アクセスできます。どうもありがとうございました。 foreachループでループのないリストのクラスのアクセス値(ネストされたクラス)?

string b = a.snippet.title 

RootObject myjsondata = new RootObject(); 

RootObject jarray = JsonConvert.DeserializeObject<RootObject>(html); 

if(jarray.items.Count>0) 
{ 
    foreach (var a in jarray.items) 
    { 
     string b = a.snippet.title; 
    } 
} 

public class Snippet 
{ 
    public string title { get; set; } 
} 

public class Item 
{ 
    public Snippet snippet { get; set; } 
} 

public class RootObject 
{ 
    public List<Item> items { get; set; } 
} 
+0

ループしないとどうなると思いますか? – Servy

+0

あなたはこれを意味しますか? 'jarray [2] .items [3] .snippet.title' –

答えて

0

あなたのコードでは、意味がありません。範囲外の変数に値を代入しています。だから私はあなたがしようとしていることを推測することしかできません。

すべてのタイトルのリストを返そうとしている場合は、Linqを使用できます。

using System.Linq; 

List<string> listOfTitles = jarray.items.Select(i => i.snippet.title).ToList(); 

jarray.itemsはnullでもかまいません。また、スニペットとtitleはnullでもかまいません。あなたのコンパイラのバージョンに応じて、

List<string> listOfTitles = null; 

if (jarray.items != null && jarray.items.Any()) 
    listOfTitles = jarray.items.Where(i => i.snippet != null && i.snippet.title != null) 
             .Select(i => i.snippet.title).ToList(); 

または短く、:

List<string> listOfTitles = jarray.items?.Where(i => i.snippet?.title != null) 
             .Select(i => i.snippet.title).ToList(); 

これはあなたがして、より具体的に説明してください探しているものではない場合。

関連する問題