c# - 如何从函数返回一个 Action ?

标签 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

要做什么? (还有更好的方法吗?)

感谢所有帮助。

最佳答案

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

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

这里的问题是,您正尝试使用围绕 editRx 的闭包来初始化 getAction,但您不能在字段初始化程序中执行此操作。尝试将其放入您的构造函数中:

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

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

另请注意,像这样使用委托(delegate)对于 C# 来说有点不合常规。您很可能可以将其重构为常规方法或其他 OOP 构造,并使您的代码更加清晰易懂。一旦你的代码工作我建议你在CodeReview.SE上询问关于如何将代码重新组织成更惯用的东西。

关于c# - 如何从函数返回一个 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824947/

相关文章:

c# - Command.CanExecute 触发后 CommandParameter 绑定(bind)解析

c# - 在C#中调用Invoke()有统一的方法吗?

c# - .net/C# 的 Html 解析器和对象模型

c# - 报表查看器 IE 11

.Net DataBinding 具有值类型属性的新对象

WPF 矩形 - 圆化顶角

c# - Linq 表达式 - 无效参数

c# - 使用 Func<T,bool>[] 作为参数列表并检查每个函数的结果

c# - 使用 Json.NET 反序列化带有数组数组的 json 字符串

c# - ASP.NET 复合控件向父窗体引发事件