Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用参数和返回值创建FUNC操作列表_C#_Func - Fatal编程技术网

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);
}