2011-04-25 66 views
0

我有一個類的:生成項目的陣列由3個不同的「子陣列」

class All{ 
A a; 
B b; 
C c; 
} 

現在,我得到3個數組:

A[] as; 
B[] bs; 
C[] cs; 

它們中的每一個可以是空的(長度= 0)或null。
我需要創建一個Alls對象列表,其中包含至少有一個元素的數組(我不需要空對象)。

For example: 
    A[] as={a1, a2}; 
    B[] bs{}; 
    C[] cs{c1, c2}; 
=> Result: All[] = { 
     All{a: a1, b:null, c:null}, 
     All{a: a1, b:null, c:c1}, 
     All{a: a1, b:null, c:c2}, 
     All{a: a2, b:null, c:null}, 
     All{a: a2, b:null, c:c1}, 
     All{a: a2, b:null, c:c2} 
     All{a: null, b:null, c:c1}, 
     All{a: null, b:null, c:c2} 
     //All{a: null, b:null, c:null} -> This is an empty object and I don't need it 
}; 

怎樣才能全部[]?

回答

0

鑑於Alls這個定義:

class All 
{ 
    public A A { get; set; } 
    public B B { get; set; } 
    public C C { get; set; } 
} 

像這樣的東西應該工作:

A[] myAs = new [] { new A(), new A(), new A()}; 
B[] myBs = new B[] {}; 
C[] myCs = new [] {new C(), new C()}; 

var combinations = (from a in myAs.Concat(new A[] { null }) 
        from b in myBs.Concat(new B[] { null }) 
        from c in myCs.Concat(new C[] { null }) 
        where (!(a == null && b == null && c == null)) 
        select new All() { A = a, B = b, C = c }).ToArray(); 
+0

這不包括組合中的null嗎? – manojlds 2011-04-25 16:36:37

+0

@manojlds:它確實包括最多從a,b,c中任意兩個都爲空的組合,但不是所有三個都爲空。 – BrokenGlass 2011-04-25 16:39:36

+0

看到我的答案。他期待'null'成爲組合中要素的一部分。 – manojlds 2011-04-25 16:43:21

-1

使用對象聲明:

Object[] All; 

您可以將包括您所創建的所有類的任何對象。

+0

我相信你不明白我的問題。全部由A,B和C組成,我想創建包含A,B和C的所有可能性的所有Alls數組。 – Naor 2011-04-25 15:50:07

2

這是你在找什麼? (您可能需要打磨,雖然有點)

List<A> awithnull = as.ToList(); 
List<B> bwithnull = bs.ToList(); 
List<C> cwithnull = cs.ToList(); 

awithnull.Add(null); 
bwithnull.Add(null); 
cwithnull.Add(null); 

var result = from ae in awithnull 
      from be in bwithnull 
      from ce in cwithnull 
      where (!(ae==null && be ==null && ce == null)) 
      select new All() {a = ae, b = be, c = ce}; 
+0

謝謝!如果我可以 - 我會採取你的兩個答案。但BrokenGlass是第一個。 +1 – Naor 2011-04-25 17:34:05