我正在设计一个状态机类,并希望使用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
我确定我在这里缺少一些愚蠢的东西,但是我盯着它看了太久了,似乎无法发现它。有什么想法吗?
答案 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[] { ... })