【发布时间】: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