相当于C#中的func_get_arg?

时间:2011-12-07 22:53:40

标签: c#

C#中是否有等同于func_get_arg(php)的内容?

  

func_get_arg(int $ arg_num):

     

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

     

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

它基本上意味着索引可用于获取参数值...

由于

3 个答案:

答案 0 :(得分: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的{​​{1}}。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

据我了解,PHP中func_get_arg的目的是为函数提供可变数量的参数。这是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。