2011-12-07 153 views
0

在C#中是否有相当于func_get_arg(php)?C#中func_get_arg的等价物?

func_get_arg(INT $ arg_num):

获取从一个用户定义的函数的参数列表指定的参数。

该函数可以与func_get_args()和func_num_args()一起使用,以允许用户定义的函数接受可变长度参数列表。

这基本上意味着指数可以用来获取参数值...

感谢

+0

检查这一个:http://stackoverflow.com/questions/214086/how-can-you-get-the-names-of-method-parameters-in-c –

+0

我不知道什么离手这是在c#的基本框架内完成的。有一些依赖注入框架可以支持类似的东西。知道你想要完成什么会是有帮助的。 –

+0

问你想做什么,现在你想怎么做:) – 2011-12-07 23:05:01

回答

3

C#是静态类型的,所以函数签名。你不能只调用一个包含任意数量参数的方法,这实际上意味着不需要func_get_arg

也就是说,如果你有一个方法,你可以得到相当接近,如这一个:

void MyMethod(params object[] args) 
{ 
    var indexOfArgument = 42; // or whatever 
    var valueOfArgument = args[indexOfArgument]; // should also check array bounds 
} 

当然,如果所有的参数都输入为System.Object有没有什么你可以与他们无关,但是从一个语法观点它接近(加上,你也可以有一个方法,接受params T[] args任何类型T)。

+0

什么是params? – Darren

+0

@Darren:从MSDN:“['params'](http://msdn.microsoft.com/en-us/library/w5zay9db(v = VS.100).aspx)关键字可以让你指定一个方法参数需要可变数量的参数。“ – Jon

+0

谢谢大家,这工作,我看到其他noes也做。 – Darren

0
在C#

有一个方法“__arglist()” 或者你可以很容易地使一个函数接受可变数量的参数,这样

int Average(params int[] ints) 
{ 
int total = 0; 
foreach(int i in ints) // loop to the number of parameters 
    total += i; 
return (ints.Length > 0 ? total/ints.Length : 0); 
} 
0

据我了解,func_get_arg在PHP的目的是为了有一个函数的可变数量的参数。这里的equivilent到在C#:

public void Foo(string realArg, int anotherRealArg, params int[] variableArgs) 
{ 
    Console.WriteLine("My real string argument was " + realArg); 
    Console.WriteLine("My real integer argument was " + anotherRealArg); 
    Console.WriteLine("And I was given " + variableArgs.Length + " extra arguments"); 
} 

// Usage 
Foo("Bar", 1, 2, 3, 4, 5); 

在这个方法中,variableArgs是一个普通的数组。在访问它之前,你需要检查它的长度以确保你没有得到IndexOutOfRangeException。