本文内容转自:http://blog.youkuaiyun.com/ecidevilin/article/details/53355400,请点击链接查看原文,尊重楼主版权。
ref和out
C#只能有一个返回值,当我们需要一个方法返回多个返回值的时候,可以为方法添加一个ref或者out修饰的参数。
如:
public bool TestRef(ref int i)
{
i = i + 44;
return true;
}
public bool TestOut(out int i)
{
i = 55;
return false;
}
使用:
int i = 0;
TestRef (ref i);
Console.WriteLine (i);
TestOut (out i);
Console.WriteLine (i);
ref和out区别在于:
ref的实参必须先初始化才能传递,而out的实参不需要初始化。
而out的形参必须当做未初始化的值来处理(例如上面的例子不能写成i+=55),并且在返回之前必须为该参数赋值。
ref和out并不作为编译时方法签名的一部分,所以下面这样是编译不过的:
class TestRefOut
{
public void SampleMethod(out int i) { i = 1; }
public void SampleMethod(ref int i) { i = 2; }
}
但是如果其中一个方法去掉out或者ref,那么便是可编译通过的。
注意:不能将ref和out用于异步方法(通过async修饰符定义)和迭代器方法(包含yield return和yield break语句)。