【发布时间】:2016-08-26 09:01:30
【问题描述】:
我的程序有一个简单的函数 newline(),它将为 int 变量 x 提供一个 int 值。
public void autowordwrap(string wrapthisword)
{
//some code that does things irrelevant to this problem, with the string
x=newline();
//assume x is already declared properly
//do something with value from x
}
当我引入一个新函数 sameline()
时问题就开始了我希望能够一次方便地完成其中任何一项:
public void autowordwrap(string wrapthisword)
{
x=newline();
}
或者,
public void autowordwrap(string wrapthisword)
{
x=sameline();
}
所以,我想到了尝试这个:
public void autowordwrap(string wrapthisword, Func<void,int> linefunc)
{
x=linefunc;
}
我稍后可以将要求称为:
autowordwrap(mystring,newline());
或者,
autowordwrap(mystring,sameline());
但这对我来说不太有效!
它说关键字'void'不能在这种情况下使用
问题是:
我想要做的应该足够简单,但我不太了解它是如何工作的。我知道 Action 适用于没有返回类型的函数,而 Func 适用于有返回类型的函数。[Reference-1]。
到目前为止我收集到的是:
-
MSDN tells me: 要引用没有参数并返回 void 的方法(或者在 Visual Basic 中,声明为 Sub 而不是函数),请改用 Action 委托。
- 由于我的 newline() 函数被定义为 int 数据类型,并且它在运行后返回一个整数,所以我认为 Action 不适合我的需要。
This answer 有我需要的东西,但对于我的生活,我无法让它为我的特定目的工作。
问题分解
- 我有两个函数 newline() 和 sameline()
- 我希望将其中的任何 一个作为函数 autowordwrap() 的参数传递
这意味着,在我的主程序中,我将在必要时使用 autowordwrap(somestring, newline()); 或 autowordwrap(somestring, sameline()); !
- newline() 和 sameline() 都是 int 数据类型函数,它们在被调用时返回整数值。为了解决这个问题,让我们将它存储在 int x
- 尝试解决这个问题时,我假设在调用 example: newline( void) 和 int 部分用于将函数 newline() 或委托 Func 表示的任何函数定义为返回 int 值的函数。
- 我已经意识到,我所学到的似乎在某些地方存在根本性的缺陷。请赐教。参考链接也会很有帮助。
- 以任何方式解决此问题都是可以接受的。您不需要以我可能无意中严格概述的方式执行此操作。只要满足 C# 的预期目的,请随意探索创造性的解决方案
是的,我承认这可能与 this question 重复,但我无法理解那里发布的有用答案。假设许多未来的读者都会遇到这种情况,我提出这个问题并将其链接到that question,以便将来可能会遇到同样问题的人有所帮助。
尾注:
这个问题已经解决了!标记的答案为执行此操作奠定了基础,there is also some great explanation in the answers. 如果您在解决此类类似问题时遇到一些错误,您也许可以通过查看我自己错误的屏幕截图来解决这些问题。 They're here in the revision section no.4
【问题讨论】:
-
我已经为你回答了这个问题——比如 newline() 之后删除括号——这会将换行函数传递给你的函数。你正在做的是传入一个整数,它期望一个方法,当调用时,返回一个整数。
-
您的编辑非常反对您应该如何提问。它非常长,非常冗长,它有大量不需要的图片(如果这些图片完全相关,请使用代码块),更糟糕的是你的原始问题没有这些问题。阅读How to Ask 并回滚您的帖子。
-
@Amit :正如我在问题中提到的,屏幕截图是对 cmets 中提出的请求的响应。有人问他们,因为他们没有清楚地了解我的问题。所以我只是按照他们的要求做了。有没有张不需要的图片。错误列表对于查明问题是必要的。我最初的问题是基于我假设的解决方案。它是一个大纲,因此不会遇到我应用一些建议时遇到的相同错误。如果有人想理解这个问题,我认为这是必要的,因此我为我的行为辩护。祝你有美好的一天!