我有一個需求,我需要知道GetEnumerator()
的調用方法。覆蓋GetEnumerator的默認行爲
我認爲最好的方式可能會覆蓋默認行爲GetEnumerator
我創建的一個,即GetEnumerator([CallerMemberName]string caller = null)
,但我似乎無法做到這一點,因爲任何調用它仍然會去原來的。一些調用代碼
public class MyItems : IEnumerable<string>
{
private List<string> items = new List<string>();
public MyItems()
{
items.Add("One");
items.Add("Two");
items.Add("Three");
items.Add("Four");
items.Add("Five");
items.Add("Six");
}
public IEnumerator<string> GetEnumerator()
{
return items.GetEnumerator();
}
public IEnumerator<string> GetEnumerator([CallerMemberName]string caller = null)
{
var method = caller;
return items.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
例子可以
private void button1_click(object sender,EventArgs e)
{
MyItems items = new MyItems();
foreach (var item in items)
{
}
}
的目的是,我希望在GetEnumerator()
方法知道例如"button1_click"
什麼呢主叫代碼是什麼樣子? – Default 2013-03-21 11:06:11
不要直接實現IEnumerable。相反,有一個方法GetEnumerable(字符串調用者),它返回一個IEnumerable並將調用者作爲參數。 – Guillaume 2013-03-21 11:07:33
由於我們正在實現已經實現IEnumerable的接口,因此不實現IEnumerable不是一種選擇。界面是Microsoft IDBSet界面。我們需要知道來自通用存儲庫的調用方法,以便我們可以做出相應的反應,但是希望保持存儲庫層和DBSets之間的分離等等。 –
jclarkson
2013-03-21 11:35:29