初始化 lambda 表达式列表

Initializing a list of lambda expressions

我正在设计一个状态机class,想使用 lambda 表达式来表示满足状态转换对象的条件。当我创建一个新的 State Transition 对象时,我还想向它传递一个条件列表,它可以用来评估是否移动到下一个状态。但是,我在初始化条件列表时遇到问题。这是一个示例,简化的代码示例,说明了我遇到的问题:

// Alias for delegate function
using Condition = Func<int, bool>;

class SomeStateClass
{
    public void SomeFuncToCreateConditionList()
    {
        List<Condition> conditions = new List<Condition>({
            { new Condition(x => x > 5) },
            { new Condition(x => x > 5 * x) }
        });
    }
}

我在 List<Condition>({ 行上的 curley 大括号出现语法错误 ) expected,在右括号

上出现另一个语法错误
new Condition(
; expected
} expected

我确定我在这里遗漏了一些愚蠢的东西,但我已经盯着它看了太久而且似乎无法发现它。有什么想法吗?

您的列表初始化程序有误。

应该是new List<Condition> { ... }而不是new List<Condition>({...}) 您也不需要将每个 new Condition() 括在大括号中。

这应该有效:

// Alias for delegate function
using Condition = Func<int, bool>;

class SomeStateClass
{
    public void SomeFuncToCreateConditionList()
    {
        List<Condition> conditions = new List<Condition>
        {
            new Condition(x => x > 5),
            new Condition(x => x > 5 * x)
        };
    }
}

或者更短的方法:

public void SomeFuncToCreateConditionList()
{
    var conditions = new List<Condition>
    {
        x => x > 5,
        x => x > 5 * x
    };
}

试试这个

new List<Condition> { ... }

new List<Condition>() { ... }

或者如果出于某种原因你想使用构造函数的语法

new List<Condition>(new[] { ... })