c# 关键字ref 与 out 的区别
时间: 2024-10-08 08:08:50 浏览: 54
在 C# 中,`ref` 和 `out` 都用于传递参数,并允许方法影响到参数本身,但它们之间有关键的区别:
1. **作用时机**:
- `ref` 参数在方法开始时就已经初始化了。如果尝试访问未初始化的 `ref` 参数,程序会抛出异常。
- `out` 参数则是在方法结束时才可能被赋予值。这意味着在方法内部,你可以先计算结果,然后在方法返回前设置它。
2. **赋值规定**:
- 对 `ref` 参数的任何修改都会反映回原始的传入变量。一旦进入方法,就不能再将其设为 null。
- `out` 参数在方法返回时必须有一个非 null 的值。如果方法内部不分配值,则必须显式地将其设置为 null。
3. **使用场景**:
- 当你需要在方法中更改传参的值并且确定该值会被更新时,可以使用 `ref`。
- 如果不确定是否在方法内部提供值,或者需要先处理某个值后再决定是否使用,应使用 `out`。
举个例子:
```csharp
public void Swap(ref int a, ref int b) // ref 示例
{
a = b;
b = a;
}
Swap(ref x, ref y); // 修改x和y的值
public void GetLastOrDefault(out int value) // out 示例
{
value = int.TryParse(someString, out value) ? value : default(int);
}
GetLastOrDefault(out var result); // 如果字符串转换失败,result将是默认值
```
阅读全文