2013-02-13 26 views
-6

誰能告訴我如何使用stack.ofType<>?我已經嘗試了很多次,但不能這樣做。堆棧類型<>選項如何工作

private void button2_Click(object sender, EventArgs e) 
{ 
    Stack st = new Stack(); 
    st.Push("joginder"); 
    st.Push("singh"); 
    st.Push("banger"); 
    st.Push("Kaithal"); 
    st.OfType<> //how to work this option 
} 
+0

目前還不清楚,你在做什麼。 – 2013-02-13 15:59:31

+0

你只在你的堆棧中插入字符串,所以'OfType <>()'會帶給你的好處不清楚。你能詳細說明你想達到的目標嗎? – 2013-02-13 16:00:10

回答

0

使用genericsStack<T>

private void button2_Click(object sender, EventArgs e) 
    { 
     Stack<string> st = new Stack<string>(); 
     st.Push("joginder"); 
     st.Push("singh"); 
     st.Push("banger"); 
     st.Push("Kaithal"); 
} 

你也可以這樣做:

public class Client { 
    public string Name { get; set; } 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
     Stack<Client> st = new Stack<Client>(); 
     st.Push(new Client { "joginder" }); 
     st.Push(new Client { "singh" }); 
     st.Push(new Client { "banger" }); 

} 

注意類客戶是演示如何T被替換爲你指定的類型。

4

使用通用Stack<T>類型,而不是Stack,這樣你會得到特定類型的堆棧,你沒有投,你從中讀出的值:

Stack<string> st = new Stack<string>(); 
st.Push("joginder"); 
st.Push("singh"); 
st.Push("banger"); 
st.Push("Kaithal"); 

現在,當你從堆棧中彈出某些東西或者循環遍歷這些東西時,它已經是一個字符串了,你不必投射它。

1

您提供一個類型,像這樣

st.OfType<string>() 

這將返回一個IEnumerable爲您無需任何彈出項目從堆棧迭代。

鑑於此代碼:

 Stack st = new Stack(); 
     st.Push("joginder"); 
     st.Push("singh"); 
     st.Push("banger"); 
     st.Push("Kaithal"); 
     st.Push(1); 
     st.Push(1.0); 

     foreach (var name in st.OfType<string>()) 
     { 
      Console.WriteLine(name); 
     } 

你會得到這樣的輸出:

joginder 
singh 
banger 
Kaithal 
+0

感謝您分享寶貴的時間。 – 2013-02-14 12:46:01

0

有一個很好的例子:http://msdn.microsoft.com/en-us/library/bb360913.aspx,但是,基本上你可以使用OfType創建的IEnumerable例如,如果您的代碼爲:

 Stack st = new Stack(); 
     st.Push("joginder"); 
     st.Push(1.4); 
     st.Push("singh"); 
     st.Push("banger"); 
     st.Push(2.8); 
     st.Push("Kaithal"); 

     IEnumerable<String> strings = st.OfType<String>(); //how to work this option 
     IEnumerable<double> doubles = st.OfType<double>(); 

將創建爲「列表」,一個包含堆棧中的所有字符串,另一個包含所有雙打。

相關問題