2013-11-02 78 views
0

我有一個Model對象,其中包含節點列表。這些節點包含一個簽名。C#鋸齒陣列獲取屬性實例linq

我想有一個getter屬性返回一個簽名數組。我有麻煩實例化數組,我不確定是否應該使用數組/列表/枚舉或其他。

你會怎麼做到這一點?

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      var m = new Model(); 

      Console.WriteLine(m.Signatures.ToString()); 
      Console.ReadLine(); 
     } 
    } 

    public class Model 
    { 
     public List<Node> Nodes { get; set; } 

     public int[][] Signatures 
     { 
      get 
      { 
       return Nodes.Select(x => x.Signature) as int[][]; 
      } 
     } 

     public Model() 
     { 
      Nodes = new List<Node>(); 
      Nodes.Add(new Node { Signature = new[] { 1,1,0,0,0 } }); 
      Nodes.Add(new Node { Signature = new[] { 1,1,0,0,1 } }); 
     } 
    } 

    public class Node 
    { 
     public int[] Signature { get; set; } 
    } 
} 
+1

你試過:Nodes.Select(X => X .Signature).ToArray()? –

回答

1

在你Signatures屬性您嘗試使用as運營商的類型轉換成int[][]。然而Select方法返回一個不是數組的IEnumerable<int[]>。使用ToArray創建陣列:正確

public int[][] Signatures 
{ 
    get 
    { 
     return Nodes.Select(x => x.Signature).ToArray(); 
    } 
} 
+0

謝謝,不敢相信這是這麼簡單。 – Pizzaguru

2

使用ToArray()

return Nodes.Select(x => x.Signature).ToArray(); 

而且像這樣將它輸出:

Array.ForEach(m.Signatures, x=>Console.WriteLine(string.Join(",", x)));