如何从函数返回一个动作?

时间:2014-09-13 15:53:58

标签: c# wpf func

我是新手(我读过或尝试的任何内容都没有)。

我希望使用以下形式的函数:

 Func<string, Action> getAction = (editingmark) =>
    {
        Action doit;
        switch (editingmark)
        {
            case ">":
                doit = editRx;    <--ERROR OCCURS HERE.
                break;
        }
        return doit;
    };

其中editRx的格式为:

Action editRx = () =>
    {
    };

我得到了:

字段初始值设定项无法引用非静态字段,方法或属性... editRx

怎么办? (还有更好的方法吗?)

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

看起来您正在尝试将getAction初始化为字段,如下所示:

public class Foo
{
    Action editRx = () =>
    {
    };
    Func<string, Action> getAction = (editingmark) =>
    {
        Action doit = null;
        switch (editingmark)
        {
            case ">":
                doit = editRx;
                break;
        }
        return doit;
    };
}

这里的问题是您尝试使用getAction周围的闭包进行初始化editRx,但是您无法在字段初始值设定项中执行此操作。尝试将它放在构造函数中:

public class Foo
{
    Action editRx = () =>
    {
    };
    Func<string, Action> getAction;

    public Foo()
    {
        this.getAction = (editingmark) =>
        {
            Action doit;
            switch (editingmark)
            {
                case ">":
                    doit = editRx;
                    break;
            }
            return doit;
        };
    }
}

另请注意,使用这样的代表对于C#来说有点不同寻常。您可以将其重构为常规方法或其他OOP构造,并使您的代码更加清晰易懂。在您的代码正常工作之后,我建议您在CodeReview.SE上询问如何将代码重新组织为更惯用的代码。

答案 1 :(得分:2)

请查看此内容,

Func<string, Action> getAction = (editingmark) =>
{
    Action doit = null;
    switch (editingmark)
    {
        case ">":
            doit = editRx;
            break;
    }
    return doit;
};
static readonly Action editRx = () =>
{
};