C# 初始化lambda表达式列表

C# 初始化lambda表达式列表,c#,lambda,collection-initializer,C#,Lambda,Collection Initializer,我正在设计一个状态机类,希望使用lambda表达式来表示满足状态转换对象的条件。当我创建一个新的状态转换对象时,我还想向它传递一个条件列表,它可以用来评估是否移动到下一个状态。但是,我在初始化条件列表时遇到问题。下面是一个示例、简化的代码示例,说明了我遇到的问题: // Alias for delegate function using Condition = Func<int, bool>; class SomeStateClass { public void SomeF

我正在设计一个状态机类,希望使用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) }
        });
    }
}

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

您的列表初始值设定项有错误

它应该是
newlist{…}
而不是
newlist({…})
您也不需要将每个
新条件()
用大括号括起来

这应该起作用:

// 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)
        };
    }
}
//委托函数的别名
使用条件=Func;
类somestate类
{
public void someFunctionCreateConditionList()
{
列表条件=新列表
{
新条件(x=>x>5),
新条件(x=>x>5*x)
};
}
}
或者,一个较短的方法:

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

您的列表初始值设定项有错误

它应该是
newlist{…}
而不是
newlist({…})
您也不需要将每个
新条件()
用大括号括起来

这应该起作用:

// 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)
        };
    }
}
//委托函数的别名
使用条件=Func;
类somestate类
{
public void someFunctionCreateConditionList()
{
列表条件=新列表
{
新条件(x=>x>5),
新条件(x=>x>5*x)
};
}
}
或者,一个较短的方法:

public void SomeFuncToCreateConditionList()
{
    var conditions = new List<Condition>
    {
        x => x > 5,
        x => x > 5 * x
    };
}
public void SomeFuncToCreateConditionList()
{
var条件=新列表
{
x=>x>5,
x=>x>5*x
};
}
试试这个

new List<Condition> { ... }
新列表{…}

newlist(){…}
或者如果出于某种原因,您希望使用构造函数的语法

new List<Condition>(new[] { ... })
新列表(新[]{…})
试试这个

new List<Condition> { ... }
新列表{…}

newlist(){…}
或者如果出于某种原因,您希望使用构造函数的语法

new List<Condition>(new[] { ... })
新列表(新[]{…})

ReSharper告诉我们
var conditions=newlist{x=>x>5,x=>x>5*x}
将是最短的表单。或者也是
新列表(){…}
。感谢您的快速响应!ReSharper告诉我,
var conditions=newlist{x=>x>5,x=>x>5*x}
将是最短的表单。或者也是
新列表(){…}
。感谢您的快速响应!效果很好,看起来比我以前的方法简单得多:-)。