我有一个用户定义的类,我想创建一个公共列表作为其一部分。我希望List是我可以添加到的委托函数列表,并将每个List成员设置为委托函数。我希望这个函数列表成为我实例化的类的一部分,因此它遵循类的实例,因为我将它传递给其他函数。我需要能够通过foreach循环调用委托函数,因此它也必须是IEnumberable。
我已经尝试了几个小时,我可能会或可能不会完成这项工作的一部分。当它开始看起来我需要为自定义列表编写我自己的IEnumberation例程时,我意识到我已经超越了我的头脑而来到这里。
这是我的代码:
public delegate List<ChartTestModel> MyDelegate<T>(T i);
public class DelegateList<T>
{
public void Add(MyDelegate<T> del)
{
imp.Add(del);
}
public void CallDelegates(T k)
{
foreach (MyDelegate<T> del in imp)
{
del(k);
}
}
private List<MyDelegate<T>> imp = new List<MyDelegate<T>>();
}
我甚至不知道这是否符合我的要求。不过,我知道我无法通过它来完成任务。它完全是从拼凑在一起的代码中编写的。我几乎不明白它应该做什么。
答案 0 :(得分:2)
我不明白为什么你需要一个自定义类。只需使用List<T>
,其中T是任何委托类型。
List<Action> actions = new List<Action>();
actions.Add(() => blah blah);
actions.Add(Whatever); // Whatever() is a method
// now run them all
actions.ForEach(a => a());
答案 1 :(得分:1)
IEnumerable<T>
易于实现,尤其是当您将集合作为类的成员时。您需要做的就是定义适当的GetEnumerator
方法,最简单的方法是返回基础集合的枚举器。
class YourClass : IEnumerable<SomeClass>
{
List<SomeClass> list = ...
public IEnumerator<SomeClass> GetEnumerator()
{
return list.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
在这里,您可以隐式为IEnumerable<T>
和IEnumerable
实现隐式方法。 (您必须同时实现IEnumerable<T>
继承IEnumerable
。)
对于您的特定课程,您可能有
public class DelegateList<T> : IEnumerable<MyDelegate<T>>
{
// ...other class details
private List<MyDelegate<T>> imp = new List<MyDelegate<T>>();
public IEnumerator<MyDelegate<T>> GetEnumerator()
{
return imp.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
答案 2 :(得分:1)
我希望这对你有用。
static void Main(string[] args)
{
var delegateFuncs = new List<Func<string , string>> {
l1=>{ return "at1:" + l1;} ,
l2=>{ return "at2:" + l2;} ,
l3=>{ return "at3:" + l3;} ,
l4=>{ return "at4:" + l4;}
};
string parameter = "test";
foreach (var f in delegateFuncs)
{
Console.WriteLine(f(parameter));
}
Console.ReadLine();
}