【问题标题】:Way to deal with repetitious parameter declaration?处理重复参数声明的方法?
【发布时间】:2014-10-09 16:55:24
【问题描述】:

所以是的,正如标题所说,有没有一种方法可以轻松处理重复参数?

例如,假设我正在创建一个包含许多方法的类。假设大多数方法都采用相同的方法签名并且相当长。编造的例子:

void Method(int x, int y, int z = 0, string label = null, isNeverGonnaGiveYouUp = true)

我知道你可以为一个类创建一个别名...

using Alias = System.Console;

我没有发现任何类似的方法参数,也不知道我是否需要反复复制和粘贴所有内容(以及所有更改)。或者也许有可能使用宏或其他东西?虽然我不是一个宏观的人。

将它作为一种语言功能会很整洁。有点像...

using ArgList = params (int x, int y, int z = 0, string label = null, isNeverGonnaGiveYouUp = true)
void Method(ArgList)

或者对于泛型参数较长的时候...

using GenArgList = params (Action<int, int, int, string, bool>)

也许还有泛型方法...

using Gen = typeof (int, int, int string, bool)
void Method<Gen>(/* parameters here */)

我确信与大多数其他情况一样,它要么不值得实施,要么有正当理由不应该实施。 (或者也许我只是疯了,这通常是一个糟糕的主意。)但是复制/粘贴已经过时了。

谢谢。

编辑:关于“让它成为一个类”的论点,supercat 提出了一个有效的观点。就我而言,我正在创建一个将方法链接在一起的类 LINQ 样式,并且每组参数都可以不同。

【问题讨论】:

  • 为什么不把所有这些参数都封装到一个类中,然后把类传进去呢?
  • 你可以传递一个类甚至一个元组,但如果它们都相同,为什么不直接通过构造函数传递它们并将它们用作字段呢? IMO,如果您正在寻找防止冗长参数列表的方法,那么您的设计就有问题。
  • @Pierre-LucPineault:有些操作需要很多参数。例如,蒙版位图复制操作将需要 13 个(目标位图、在其上定义一个矩形的四个数字、源位图、在其上定义一个矩形的四个数字、蒙版位图和相应蒙版位置的 x、y 坐标到源的左上角)。如果其中一些值只是为了执行操作而计算出来的,那么纯粹为了保存它们而强制创建临时对象可能没有多大帮助。
  • 您可以投票支持在新版本的 C# 中从 F# 获取部分函数应用程序之类的东西...

标签: c# methods parameters arguments language-features


【解决方案1】:

您要求的是元编程功能,而 C# 几乎没有这些功能。

Lisp、C++ 和许多函数式语言可以满足您的要求,但我认为它不会很快在 C# 中发生。

您可以使用 T4 文本模板来生成代码,但之后您就得靠自己了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2014-01-15
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多