有没有办法从C#中的List或任何语言中将参数"展开"到方法/构造函数?这种功能有名字吗?
基本上我想简化这段代码:
var thick = new List<double>{ 1.0, 2.0, 3.0, 4.0 };
var t = new Thickness(thick[0], thick[1], thick[2], thick[3])
Run Code Online (Sandbox Code Playgroud)
我特别询问调用代码,我知道框架可以改变方法声明来获取 params double[].
如果这是不可能的,是否因为类型安全问题?
在C#中没有隐式/显式参数展开,比如javascript apply().
有一个显式参数"collection"是params关键字.这必须在方法签名中定义,但可能更类似于argumentsJavascript中的数组.请注意,它仅与数组兼容,而不是列表.签名必须是params SomeType[] arg.所以通过List<>你必须ToArray()它(我认为这是浪费机器空间和机器内存).
此功能可能不存在,因为C#是强类型的,并且需要在运行时检查参数集合(以查看数组长度是否正确,使用哪些类型的参数来选择重载等).
使用反射可以使用参数数组.该Invoke()方法具有一个参数object[],必须包含所有参数.
很奇怪甚至使用dynamic关键字你不能使用参数数组.这可能是因为即使dynamic在编译时必须知道参数的确切数量,但是使用参数数组也不知道.