C# 方法调用时params如何传入指定参数

我现在有一个方法是public static IHtmlString RenderJS(string attributes = "type=\"text/javascript\"", params string[] paths)。
然后我想调用这个方法,其实attributes一般都可以省略,因此采用指定参数的形式调用,AssetsHelper.RenderJS(paths: "/assets/js/html5shiv.js", "/assets/js/respond.min.js"),但是这样写报错,请问怎么写才是对的?

1. 参数数组-----params(可以将相同类型,数量可变的多个参数传给一个方法)

2. 引入:一般,参数的数量都是由目标方法声明所确定。然而,有时我们希望参数的数量是可变的。或许最好的方法是为方法传一个数组。然而,这会使调用代码变得稍微复杂一些,因为需要事先构造一个数组,再将这个数组作为参数来传递。

3. 为了简化代码,c#提供了一个特殊的关键字,它允许在调用一个方法是提供数量可变的参数,而不是由方法事先固定好参数的数量.

示例说明:上述例子中方法func可接受数量可变的参数,不管这些参数是以逗号分隔的,还是作为一个数组来传递的。为了获得这样的效果,func方法需要:(1)在方法声明的最后一个参数之前,添加一个parmas关键字。(2)将最后一个参数声明为一个数组。

  注意事项:

@1、参数数组不一定是方法声明中的唯一参数。单数必须是最后一个参数。由于只有最后一个参数才可能是参数数组,所以方法最多只能有一个参数数组。

@2、调用者可以为参数数组指定0个参数,这会造成包含0个数据项的一个数组。也可以显示地使用一个数组,而不是以逗号分隔的参数列表,最终生成的CIL代码是一样的。

@3、参数数组是类型安全的------类型必须匹配与数组指定的类型。

@4、假如目标方法的实现要求一个最起码的参数数量,请在方法声明中显示指定必须提供的参数。这样一来,假如要求的参数遗失了,就会导致编译器报错,而不需要依赖于运行时错误处理。例如:使用int max (int first,params int[] operands)而不是int max(params int[] operands),确保至少有一个值传给方法max。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-01

参数 paths 就是一个 string数组,

定义一个数组传入即可。

 string[] paths=new string[2]{"/assets/js/html5shiv.js", "/assets/js/respond.min.js"};
            RenderJS("type=\"text/javascript\"", paths);

请参考并采纳,谢谢!

追问

你好,你的答案我也明白,但是能不能写成
AssetsHelper.RenderJS(paths: "/assets/js/html5shiv.js", "/assets/js/respond.min.js")

这种形式?而且attribute我想保持缺省

追答

函数定义改成这样,把有默认值的参数放后面

public static IHtmlString RenderJS(string[] paths, string attributes = "type=\"text/javascript\"") 

//调用
string[] paths=new string[2]{"/assets/js/html5shiv.js", "/assets/js/respond.min.js"};            RenderJS(paths);

追问

。。真心感谢你,这样就必须传入数组,太麻烦

追答

即有默认参数,又有可选参数。

调用的时候传个数组,能有多麻烦啊。

 

可选参数有多个,必须用数组,不然和默认参数冲突。

RenderJS(paths:new string[]{"/assets/js/html5shiv.js", "/assets/js/respond.min.js"});

 

可选参数只传入一个,那没关系:

RenderJS(paths: "/assets/js/html5shiv.js");

方法定义没变。

第2个回答  2013-10-01
static void MultiParams(params int[] parArr)
{
    Console.Write("数组包含{0}个元素:",parArr.Length);
    foreach(int i in parArr)
    {
        Console.Write(" {0} ",i );
    }
    Console.WriteLine();
}
static void Main(string[]  args)
{
    int[] arr = {1,2,3,4,5};
    MultiParams(arr);    //使用一个数组作为参数
    MultiParams(10,20);    //使用2个整数
    MultiParams(5,6,7,8);    //使用4个整数
    MultiParams()    //使用0个整数
}


数组参数传值很灵活的。

C# 方法调用时params如何传入指定参数
1. 参数数组---params(可以将相同类型,数量可变的多个参数传给一个方法)2. 引入:一般,参数的数量都是由目标方法声明所确定。然而,有时我们希望参数的数量是可变的。或许最好的方法是为方法传一个数组。然而,这会使调用代码变得稍微复杂一些,因为需要事先构造一个数组,再将这个数组作为参数来传...

c#可变参数params的介绍
可变参数的使用方式如上所述。当我们在定义函数时使用params关键字定义数组,该数组就会变成一个可变参数。在调用时,我们传入的数据将形成一个数组,从而可以传入任意数量的元素。我对可变参数的应用场景有以下理解:不仅可以将数组传入,还可以在调用时直接通过形参赋值的形式传入。在方法中,这些数据仍会被...

C#中params的用法
string strsql = "insert into DutyAdmin (DutyID,Sys_Fun_ID) values (@did,@fid)";region SqlParameter[] par = new SqlParameter[2];par[0] = new SqlParameter("@did", SqlDbType.NVarChar);par[1] = new SqlParameter("@fid", SqlDbType.NVarChar);par[0].Value = mda.Did;par[1...

c#可变参数params的介绍
无需传入参数,此时params数组为空。static void Main(string[] args) { string[] lst = new string[] { "张三", "李四", "王五" }; AddName(lst); AddName("张三", "李四", "王五");}实战应用<\/: 当你在函数声明中引入params,其实是在创建一个动态数组。在调用时,无论传...

c#中函数中的params参数
int[]{1,2,3};Console.WriteLine(SumVals(arr).ToString());\/\/传入一个对象 } params 是数组型参数,根据实参形式选择引用传递或值传递,包含数量可变的参数。也就是说,SumVals方法可以接收单个实体,也可以接收实体数组。也就不需要重载方法了。特别注意:使用Params参数要检验参数是否为null ...

params 是什么意思,c#里
但如果你使用params,可以写成int Sum(params int[] numbers),这样你就可以传入任意数量的整数,如Sum(1, 2, 3, 4, 5),编译器会自动处理这个可变参数列表。在函数内部,你依然可以像处理固定数量的参数一样,通过数组的形式访问这些参数。总结来说,params关键字为C#提供了灵活性,使得函数或方法...

params 是什么意思,c#里
params关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。每个C#函数都允许有个参数带params关键字,在调用的时候可以不给他传值,也可以给他传值,还可以给他传多个值。

Params是什么含义
params的主要用途是处理数组型参数,适合那些参数个数不固定且需要传递大量数组集合的方法。在方法定义中,通过params关键字指定一个数组参数,形式为:方法修饰符、返回类型、方法名(params 类型[] 变量名)。总的来说,params是C#中一种灵活的处理可变参数的方式,为代码的灵活性和可扩展性提供了便利。

C#中params参数的用法!!!
\/\/参数可以为多个int型,例如GetWord("This is a dag.", 2);返回"a"\/\/而GetWord("This is a dag.", 1, 2);则返回"is a"\/\/GetWord("This is a dag.", 0, 2);返回"This a"public string GetWord(string s,params int[] n){ string value="";string[] str = s.split(" ")...

params是什么意思?
在C#编程中,params是一个关键术语,它用于指定函数参数的灵活性。当函数可能接受的参数数量不确定,但每个参数类型相同时,params非常有用。它表明参数是可变的,类似于 Console.WriteLine 方法,可以接受不同数量的相同类型参数。参数数组的使用有特定规则:必须放在形参列表的最后,必须是一维,不能与ref或...

相似回答