0

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

// 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

我确定我在这里遗漏了一些愚蠢的东西,但我已经盯着它太久了,似乎无法发现它。任何想法?

4

2 回答 2

5

您的 List-initializer 中有错误。

它应该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
    };
}
于 2018-10-10T15:22:42.260 回答
1

尝试这个

new List<Condition> { ... }

或者

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

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

new List<Condition>(new[] { ... })
于 2018-10-10T15:24:17.987 回答