C#——param关键字的使用

C#的param 关键字常用于对数据库进行操作的方法,通过param关键字可以防止SQL注入问题。


代码举例:


static void Main(string[] args)
{
 	Console.WriteLine(Sum(1));
	Console.WriteLine(Sum(1, 2, 3));
	Console.WriteLine(Sum(1, 2, 3, 4, 5));
}

private static int Sum(params int[] values) 
{ 
	int sum = 0; 
	foreach (int value in values) 
		sum += value; 
	return sum; 
} 

程序输出
在这里插入图片描述
该函数接收一组整数,返回值是所有整数的和,其中参数加上了param关键字后,可以在调用时在实参列表中直接列举出这组整数中的每个元素,而不需要专门定义数组进行

关于params关键字的用法,需要注意以下几点:
1. params只能用于一维数组,不能用于多维数组和诸如ArrayList、List等任何类似于数组的集合类型。
2. 被加上params关键字的形参,必须是形参列表中最后一个形参,并且方法声明中只允许一个 params 关键字。
3. 用params关键字的方法,有四种调用形式:

  (1)列举出数组各元素:Sum(1,2,3),这也是最常用的形式;
  (2)像没有加params关键字的数组形参那样,用数组名做实参:Sum(new int[]{1,2,3})或int n=new int[{1,2,3};Sum(n);;
  (3)加params关键字的参数在调用时可以省略:Sum();//返回0;这种方式有时可以少定义一个方法重载,但当明确定义了重载int Sum()时,编译器会优先调用int Sum(),而不是Sum(params int[] values)。而且省略params型参数,方法内部仍会new一个元素个数为0的数组,效率略查。
  (4)不省略params型参数,用null代替,效率比第三种略高,因为其内部不会new这个数组。
 

参考:
浅谈.net中的params关键字

### 关于C#静态方法使用非静态结构体 在C#中,静态成员属于类本身而不是任何特定对象实例。因此,在静态上下文中访问非静态成员(如非静态结构体)时存在一些限制。 #### 静态方法可以直接操作非静态`struct` 由于`struct`是值类型,默认情况下会按值传递给方法参数。这意味着即使是从静态环境中调用的方法也可以接收并处理这些类型的变量副本。然而需要注意的是,这不会影响原始的`struct`实例;而是修改传入到该方法中的临时拷贝[^1]。 下面是一个简单的例子展示如何在一个静态方法里接受和返回一个普通的(`non-ref`) `struct`: ```csharp public struct Point { public int X; public int Y; // 构造函数 public Point(int x, int y){ this.X = x; this.Y = y; } } public class Program{ /// <summary> /// 移动点的位置. /// </summary> /// <param name="point">要移动的点</param> /// <returns>新的位置.</returns> public static Point MovePoint(Point point, int offsetX, int offsetY){ point.X += offsetX; point.Y += offsetY; return point; } } ``` 在这个案例中,虽然`MovePoint()`被定义为静态方法,但它仍然能够正常工作因为它只是对输入参数的一个局部副本进行了变更,并最终将其作为新值返回出去[^2]。 但是要注意,如果尝试通过引用方式改变外部作用域内的某个具体的`struct`实例,则需要特别小心。因为直接将`struct`当作引用类型对待可能会引发意外行为——比如试图更新原对象却实际上只改变了复制件的状态。为此可以考虑采用`ref`或`out`关键字来允许方法对其参数所指向的实际内存地址作出更改[^3]。 另外值得注意的一点是关于`ref struct`的应用场景及其特殊性质。正如之前提到过的那样,这类特殊的结构体只能存在于栈空间内并且不允许拥有除静态之外任何形式的构造器。所以即便是在静态环境下也不能创建此类实体的对象实例[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值