可以使用C#中的动态参数数量创建方法吗?创建具有动态参数数量的方法
例如
Public void sum(dynamic arguments//like JavaScript)
{
//loop at run-time on arguments and sum
}
我可以使用动态对象?
可以使用C#中的动态参数数量创建方法吗?创建具有动态参数数量的方法
例如
Public void sum(dynamic arguments//like JavaScript)
{
//loop at run-time on arguments and sum
}
我可以使用动态对象?
使用params
keyword实现了可变数量的参数。
params关键字可以让你指定一个方法参数,该参数需要一个可变数量的参数 。您可以发送参数声明中指定类型的参数 的逗号分隔列表,或者指定类型的参数数组 。您也可以不发送 参数。
例如:public void Sum(params int[] args){ }
我可以使用动态对象?
是的,但可能不是你想的方式。
// example 1 - single parameter of type dynamic
private static void Sum(dynamic args) { }
// will not compile; Sum() expects a single parameter whose type is not
// known until runtime
Sum(1, 2, 3, 4, 5);
// example 2 - variable number of dynamically typed arguments
private static void Sum(params dynamic[] args) { }
// will compile
Sum(1, 2, 3, 4, 5);
所以,你可以有一个方法,如:
public static dynamic Sum(params dynamic[] args) {
dynamic sum = 0;
foreach(var arg in args){
sum += arg;
}
return sum;
}
,并调用它:Sum(1, 2, 3, 4.5, 5)
。 DLR足够聪明,可以从参数中推断出正确的类型,返回值将为System.Double
。 但是(至少在Sum()
方法的情况下),放弃对类型规范和丢失类型安全的显式控制似乎是一个坏主意。
我假设你有没有使用Enumerable.Sum()
我可以使用动态吗? – 2013-03-03 18:36:17
当您要等到运行时解析类型时才使用'dynamic'; sum方法意味着你*知道类型。 – 2013-03-03 18:37:28
'private static void Sum(params dynamic [] args)'会编译,如果这就是你要求的。 – 2013-03-03 18:38:22
也许一个例子单元测试澄清事情稍微有原因的:
[Test]
public void SumDynamics()
{
// note that we can specify as many ints as we like
Assert.AreEqual(8, Sum(3, 5)); // test passes
Assert.AreEqual(4, Sum(1, 1 , 1, 1)); // test passes
Assert.AreEqual(3, Sum(3)); // test passes
}
// Meaningless example but it's purpose is only to show that you can use dynamic
// as a parameter, and that you also can combine it with the params type.
public static dynamic Sum(params dynamic[] ints)
{
return ints.Sum(i => i);
}
使用动态时,请注意,你告诉你的编译器后退,所以你会在运行时得到你的异常。
[Test, ExpectedException(typeof(RuntimeBinderException))]
public void AssignDynamicIntAndStoreAsString()
{
dynamic i = 5;
string astring = i; // this will compile, but will throw a runtime exception
}
了解更多关于dynamics。
查看更多about params
你在寻找'params'吗? bla(params int [] variableInts) – bas 2013-03-03 18:35:09
这个怎么样:https://www.google.com/search?btnG = 1&pws = 0&q = method + with + dynamic + number + of + parameter + c%23 – antonijn 2013-03-03 18:37:31
如果你发布了一个如何调用方法的例子,那真的会有所帮助。 – 2013-03-03 18:42:33