在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一般的方法可以写多重载的方法来适应不同的参数。 如果实在觉得有很多不确定个数的参数可能会用时,那么可以用一个数组来存放这些参数(相同数据类型的参数)。
以下转自MSDN
用params修饰符声明的参数是参数数组。如果形参表包含一个参数数组,则该参数数组必须位于该列表的最后而且它必须是一维数组类型。例如,类型 string[] 和 string[][] 可用作参数数组的类型,但是类型 string[,] 不能。不可能将 params 修饰符与 ref 和 out 修饰符组合起来使用。 *优先调用参数个数相对应方法。 在该示例中,在同一个类中,已经声明了两个常规方法,它们的签名与具有参数数组的那个方法的扩展形式相同。因此,在执行重载决策时不考虑这些扩展形式,因而第一次和第三次方法调用将选择常规方法。当在某个类中声明了一个具有参数数组的方法时,同时再声明一些与该方法的扩展形式具有相同的签名的常规方法,这种情况比较常见。这样做可以避免为数组配置内存空间(若调用具有参数数组的方法的扩展形式,则无法避免)。
C#中params的使用详解 转载自:http://blog.csdn.net/genispan/article/details/5466975 为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示: public static Int32Add(params Int32[] values) { Int32 sum = 0; for (Int32 x = 0; x < values.Length; x++) { sum += values[x]; } return sum; } 只有方法的最后一个参数才可以标记params,该参数必须标识一个一维数组,但类型不限。对方法的最后一个参数传递null或者0个数目的数组的引用都是合法的,如下面代码调用上面Add方法,编译正常,运行正常,和期望一样结果为0: public static void Main() { Console.WriteLine(Add()); } 下面看一下如何编写一个可以接受任意数量、任意类型的参数的方法,也就是把上面方法的Int32改成Object[]就可以了: public static void Main() { DisplayTypes(new Object(), new Random(), "string", 10); } public static void DisplayTypes(params Object[] objects) { foreach(Object o in objects) { Console.WriteLine(o.GetType()); } } 输出: System.Object System.Random System.String System.Int32
注意,对于可接受可变数量参数的方法的调用会对性能造成一定的损失,因为数组是在堆上分配的,数组的元素还得初始化,数组的内存还得被垃圾回收器回收,为了减少这种没必要的性能损失,我们希望定义几个没有params关键字的重载方法,如System.String类的Concat方法,如下: public static string Concat(object arg0); public static string Concat(params object[] args); public static string Concat(params string[] values); public static string Concat(object arg0, object arg1); public static string Concat(string str0, string str1); public static string Concat(object arg0, object arg1, object arg2); public static string Concat(string str0, string str1, string str2); public static string Concat(object arg0, object arg1, object arg2, object arg3); public static string Concat(string str0, string str1, string str2, string str3); |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论