初始化Lambda表达式列表

时间:2018-10-10 15:20:23

标签: c# lambda collection-initializer

我正在设计一个状态机类,并希望使用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>({上说) expected时,居里括号出现语法错误,而在右圆括号中出现另一句语法错误

new Condition(
; expected
} expected

我确定我在这里缺少一些愚蠢的东西,但是我盯着它看了太久了,似乎无法发现它。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您的列表初始化器有误。

应为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
    };
}

答案 1 :(得分:1)

尝试一下

new List<Condition> { ... }

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

或者由于某种原因要使用构造函数的语法

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