2014-07-15 21 views
-1

我在寫多線程應用程序。如何將兩個不同類型的變量打包成一個對象變量?

我需要這樣的功能:一個method#1將數據放入Queue<>method#2從隊列中取得這些數據並處理它。

Method#2需要2個參數:XElementFileInfo。如何將這兩個變量存儲在Queue<>中以備後用?

+1

任何你無法創建組合模型的原因,你可以用這兩個值填充隊列? –

+2

你嘗試過元組嗎? – Jashaszun

+0

@ErikPhilips我以爲我可以避免創建新的類/結構... – Andrew

回答

3

使用Tuple<XElement, FileInfo>。實例這樣的:

Tuple<XElement, FileInfo> tuple = new Tuple<XElement, FileInfo>(elem, file); 

,然後檢索這樣的價值觀:

XElement elem = tuple.Item1; 
FileInfo file = tuple.Item2; 

所以,你可以把一個Tuple<XElement, FileInfo>到您Queue<Tuple<XElement, FileInfo>>,然後出隊的元組,並通過他們的項目方法#2 。

+0

謝謝!我知道必須有一種方法來解決我的問題,而不需要創建新的類:) – Andrew

+3

替代方法(不是衆所周知的)語法:'... = Tuple.Create(XElement,FileInfo);' –

+0

@GrantWinney惱人的是,你可以不要使用帶有該語法的'var',因爲它們的類型不能被推斷出來。 – Michael

2

您可以創建一個具有XElement和FileInfo兩個屬性的類,然後將該類的實例存儲在Queue中。

public MyClass { 
    public XElement xElement; 
    public FileInfo fileInfo; 
} 

然後使用它:

Queue<MyClass> queue = new Queue<MyClass>(); 
    foreach (MyClass instance in queue) { 
    Method#2(instance.xElement, instance.fileInfo); 
} 
+3

這是一個比使用'Tuple'更好的解決方案 - 代碼更具可讀性。 – xxbbcc

相關問題