我是新手(我读过或尝试的任何内容都没有)。
我希望使用以下形式的函数:
Func<string, Action> getAction = (editingmark) =>
{
Action doit;
switch (editingmark)
{
case ">":
doit = editRx; <--ERROR OCCURS HERE.
break;
}
return doit;
};
其中editRx的格式为:
Action editRx = () =>
{
};
我得到了:
字段初始值设定项无法引用非静态字段,方法或属性... editRx
怎么办? (还有更好的方法吗?)
感谢您的帮助。
答案 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 = () =>
{
};