2011-10-31 38 views
0

我有一個List<FieldsInfo>在兩個不同的名稱空間中說A & B它們都在同一個VS解決方案中的不同項目中。我已在名稱空間B中爲List<FieldsInfo>填充了一些值。我想在名稱空間B中將此列表傳遞給List<FieldsInfo>以將值賦給ListBox控件。請告訴我怎樣才能做到這一點。使用通用列表+ C#在不同名稱空間之間傳遞數據使用通用列表+ C#

+0

我可以澄清一下:你的意思是你有'FieldsInfo'在兩個命名空間中單獨定義,即'A.FieldsInfo'和'B.FieldsInfo'?另外,在你的例子中,你只能使用'B' - 不清楚'A'在你的例子中的位置。 –

+0

是正確的Marc – RSP

+0

所以......在你的例子中,「A」在哪裏? –

回答

3

沒有有關A.FieldsInfoB.FieldsInfo。理想的做法是讓它們只有一種類型。如果這是不可能的,那麼一個懶惰的妥協就是在某處(與普通成員)聲明IFieldsInfo,並從兩種類型實現IFieldsInfo。這樣做的一個好處是,隱式接口的實現會踢,和partial類使其能夠爲你的控制之外生成的類型做到這一點甚至:

namespace A { 
    partial class FieldsInfo : IFieldsInfo {} 
} 
namespace B { 
    partial class FieldsInfo : IFieldsInfo {} 
} 

現在只是在條款講,如果IFieldsInfo,而不是要麼A.FieldsInfoB.FieldsInfo

3

就編譯器和CLR而言,不同命名空間中的兩種類型完全是不同類型。事實上,他們有相同的簡單名稱是無關緊要的 - 從長遠來看,您的代碼可能會造成混淆。您需要提供這兩種類型之間的轉換 - 或者最好是,如果它們表示相同的信息,則僅使用單一類型開始。

一旦你有一個轉換(如果你還需要一個),你可以使用ConvertAll方法:

List<Foo> = bars.ConvertAll(bar => Foo.FromBar(bar)); 

或LINQ:

List<Foo> = bars.Select(bar => Foo.FromBar(bar)) 
       .ToList(); 

ConvertAll會稍微更有效,但是如果你想處理List<T>以外的類型,LINQ更加靈活。