我有一个需求,我需要知道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