Tom*_*duy 1 .net c# parameters methods
检查此方法:
public static void Swap(ref int i, ref int j)
{
int aux=i;
i=j;
j=aux;
}
Run Code Online (Sandbox Code Playgroud)
它比这更有效吗?
public static void Swap1(int[] a, int i, int j)
{
int aux=a[i];
a[i]= a[j];
a[j]=aux;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的方法:
static void Main(string[] args)
{
int[] a = { 5, 4, 3, 1 };
Swap(a[1], a[2]);
Swap(a, 1, 2);
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更有效,为什么?
您的方法根本不会交换任何参数.我的意思是它会在你的方法中交换参数,但它不会影响源参数的值.这是因为值类型在传递给方法时会被复制.这是一个例子:
void IncorrectSwap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void HereHappensNothing()
{
int a = 1;
int b = 2;
IncorrectSwap(a, b);
// a still = 1, and b = 2, nothing happens
}
Run Code Online (Sandbox Code Playgroud)
要使您的方法工作,您必须通过引用传递值类型,如下所示:
void CorrectSwap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
void HereSwapHappens()
{
int a = 1;
int b = 2;
CorrectSwap(ref a,ref b);
// a = 2, and b = 1, Ok.
}
Run Code Online (Sandbox Code Playgroud)
在这里,您可以阅读有关值类型以及如何使用它们的信息.
更新
更新后.我不认为只要值类型在ref传递时没有盒装,就不会有任何性能上的显着差异.传递更多参数可能会有一些惩罚,但我不认为它应该是重要的,你不会看到差异.