C#方法中的params参数类型

本文介绍了一种利用C#中的params参数特性来简化方法签名的方法,通过一个示例展示了如何让一个方法既能接受单个参数也能接受多个参数组成的数组,从而避免了方法重载。
我有一方法如下:
None.gifpublic string GetByCriteria(params string[] strs)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
string result = string.Empty;
InBlock.gif            
foreach (string str in strs)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
//执行代码
ExpandedSubBlockEnd.gif
            }

InBlock.gif
InBlock.gif            
return result;
ExpandedBlockEnd.gif        }

params 是数组型参数,根据实参形式选择引用传递或值传递,包含数量可变的参数。
也就是说,GetByCriteria方法可以接收单个实体,也可以接收实体数组。
也就不需要重载方法了。
调用:
None.gif //单个实体
None.gif
        this.GetByCriteria("test");
None.gif
None.gif        
//数组
ExpandedBlockStart.gifContractedBlock.gif
        string[] strs = new string[]dot.gif{"test","test1"};
None.gif        
this.GetByCriteria(strs);
 
C# 中,当方法参数类型未知时,有以下几种处理方式: ### 使用 `object` 类型 `object` 是所有类型的基类,任何类型的值都能隐式转换为 `object` 类型。可以在方法中使用 `object` 类型参数来接收不同类型的数据。不过在使用时,通常需要进行类型检查或转换。示例代码如下: ```csharp using System; class Program { static void PrintObject(object obj) { if (obj is int) { int num = (int)obj; Console.WriteLine($"The integer value is: {num}"); } else if (obj is string) { string str = (string)obj; Console.WriteLine($"The string value is: {str}"); } else { Console.WriteLine("Unknown type"); } } static void Main() { int num = 10; string str = "Hello"; PrintObject(num); PrintObject(str); } } ``` 这种方式的缺点是存在装箱和拆箱操作,可能会带来性能开销,并且类型安全方面需要手动处理。 ### 使用泛型方法 泛型方法可以在编译时进行类型检查,避免了运行时的类型转换异常,也不需要进行装箱和拆箱操作,提高了性能。示例代码如下: ```csharp using System; class Program { static void PrintValue<T>(T value) { Console.WriteLine($"The value is: {value}"); } static void Main() { int num = 10; string str = "Hello"; PrintValue(num); PrintValue(str); } } ``` ### 使用 `params` 关键字结合 `object` 类型 `params` 关键字允许向方法传递可变数量的参数。结合 `object` 类型,可以接收不同类型和数量的参数。示例代码如下: ```csharp using System; class Program { static void PrintParams(params object[] list) { for (int i = 0; i < list.Length; i++) { Console.WriteLine(list[i]); } } static void Main() { PrintParams(1, 'a', "test"); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值