向 Func 添加方法

Add methods to Func

我有一个 Func 列表,我想添加元素。 如果我像下面这样在“开始”中添加它们,没问题:

        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 ...;
        }

但我想在没有开始的情况下定义列表,这样我就有了一个干净的方法列表,我可以将这些方法视为连续的元素。我试过经典格式:

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

这给了我解析错误

我这样试过:

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

        static bool Iamdead()
        {
        ...
        return ...;
        }
        static bool Iamalive()
        {
        ...
        return ...;
        }

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

谢谢

像这样:

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

我强烈怀疑问题是您试图在字段初始值设定项中访问 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() { ... }

(我假设您 实际上 希望您的条件取决于实例中的状态。如果他们不这样做,您就不需要 this。如果除了这些条件之外不使用这些方法,并且它们足够短,您可能希望改用 lambda 表达式。)

你可以只使用 lambdas:

public List<System.Func<bool>> conditions = new List<System.Func<bool>>()
{
    () =>
    {
        return false;
    }
    ,
    () =>
    {
        return true;
    }
};