C# 如何使用参数和返回值创建FUNC操作列表
我正在尝试创建我的第一个操作列表,我将能够检查传递对象中的状态 但是我不能让它工作-它给了我一个返回类型错误。但是如果我将返回类型更改为它想要的类型,那么我就不能向下传递值 示例代码:C# 如何使用参数和返回值创建FUNC操作列表,c#,func,C#,Func,我正在尝试创建我的第一个操作列表,我将能够检查传递对象中的状态 但是我不能让它工作-它给了我一个返回类型错误。但是如果我将返回类型更改为它想要的类型,那么我就不能向下传递值 示例代码: public class Class1 { public Main() { var decisionObject = new DecisionObject(); var decisionList = new List<Func<DecisionObje
public class Class1
{
public Main()
{
var decisionObject = new DecisionObject();
var decisionList = new List<Func<DecisionObject, DecisionObject>>
{
Method1(decisionObject),
Method2(decisionObject),
Method3(decisionObject)
};
var exitLoop = false;
foreach (var method in decisionList)
{
decisionObject = method(decisionObject);
switch (decisionObject.Status)
{
case Status1:
exitLoop = true;
break;
case Status2:
case Status3:
case Status4:
break;
}
if (exitLoop) break;
}
}
public Func<DecisionObject, DecisionObject> Method1(DecisionObject
decisionObject)
{
decisionObject = SomeOtherMethod(decisionObject);
return decisionObject;
}
}
公共类1
{
公用干管()
{
var decisionObject=新的decisionObject();
var decisionList=新列表
{
方法1(决策对象),
方法2(决策对象),
方法3(决策对象)
};
var exitLoop=false;
foreach(决策表中的var方法)
{
decisionObject=方法(decisionObject);
开关(decisionObject.Status)
{
案例状态1:
exitLoop=true;
打破
案例2:
案件情况3:
案件情况4:
打破
}
如果(exitLoop)中断;
}
}
公共函数方法1(DecisionObject
决策对象)
{
decisionObject=SomeOtherMethod(decisionObject);
返回决策对象;
}
}
我错过了什么
decisionObject = SomeOtherMethod(decisionObject)
可能不是返回func而是返回值
您可以这样做:
public Func Method1()
{
var myFunc=(myObject)=>SomeOtherMethod(myObject);
返回myFunc;
}
这将创建并返回一个新的func,该func需要一个参数并调用其他方法
请注意,Method1的参数在这种方法中是不需要的,所以我删除了它 如果我没有弄错的话,
Method1
、Method2
和Method3
只需接受一个决策对象并返回另一个。因此,它们的定义如下(希望这对您来说很简单):
然后,您需要将所有这些方法放入一个列表中并执行它们。要将它们放入列表,请将方法名称放入代码中,不带括号。这告诉C#您希望引用该方法本身,而不是调用该方法的结果
var decisionList = new List<Func<DecisionObject, DecisionObject>>
{
Method1, //Do not invoke-- just store a reference to the method
Method2,
Method3
};
这里要记住的关键是当你在一个符号后面加括号时,它会告诉C#调用它。因此,如果您只想引用方法本身,请不要用括号括起来。
它会给我一个错误
始终假设有人会问的下一个问题是错误是什么?我假设它是Method1的返回类型。但是,如果有错误,请纠正我。正确-该类型不是Func类型…无法完全测试它,但它看起来可以正常工作。非常感谢。
var decisionList = new List<Func<DecisionObject, DecisionObject>>
{
Method1, //Do not invoke-- just store a reference to the method
Method2,
Method3
};
foreach (var func in decisionList)
{
var result = func(decisionObject);
}