向Func添加方法

son*_*nny 0 c# list func

我有一个Func列表,我想添加元素.如果我在Start上添加它们,如下所示,没问题:

        public List<System.Func<bool>> conditions = new List<System.Func<bool>>();

        void Start()
        {
        conditions.Add(Iamdead);
        conditions.Add(Iamalive);
        }

        bool Iamdead()
        {
        ...
        return ...;
        }
        bool Iamalive()
        {
        ...
        return ...;
        }
Run Code Online (Sandbox Code Playgroud)

但我想在没有Start的情况下定义列表,以便我有一个干净的方法列表,我可以将其视为连续的元素.我尝试过经典格式:

public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
        bool Iamdead()
        {
        ...
        return ...;
        }
        ,
        bool Iamalive()
        {
        ...
        return ...;
        }
};
Run Code Online (Sandbox Code Playgroud)

这给了我解析错误

我试过这样的:

public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
    {
Iamdead,Iamalive
    };

        static bool Iamdead()
        {
        ...
        return ...;
        }
        static bool Iamalive()
        {
        ...
        return ...;
        }
Run Code Online (Sandbox Code Playgroud)

这只有在方法是静态的情况下才有效,但我不希望它们是静态的.没有静态,它不起作用.我似乎无法理解这里的数据结构.谁能告诉我在列表中定义Func的正确方法?

谢谢

Jon*_*eet 7

我强烈怀疑问题是你试图this在字段初始化程序中隐式访问.你不被允许这样做.只需将初始化移动到构造函数中:

// You don't really use public fields, do you?
private readonly List<Func<bool>> conditions;

public MyClass()
{
    conditions = new List<Func<bool>> { Method1, Method2 };
}

private bool Method1() { ... }
private bool Method2() { ... }
Run Code Online (Sandbox Code Playgroud)

(我假设你实际上希望你的条件依赖于实例中的状态.如果他们没有,你就不需要this.如果除了这些条件之外不使用这些方法,并且它们足够短,你可能想要使用lambda表达式.)