![](/img/trans.png)
[英]Difference between params modifier and out and ref modifiers with regards to delegates
[英]using ref or out modifiers with params modifier C#
我在這里有以下代碼,我知道這不會編譯,因為我試圖將 ref 修飾符與 params 修飾符一起使用:
public static int[] Findfactors(ref params int[] pro) {
int[] hjk = { 88, 99 };
pro = hjk;
return pro;
}
我只是想讓“pro”指向“hjk”,但我做不到。 為什么 C# 不允許我們這樣做? 為什么我不能將 ref 或 out 與參數一起使用?
我最好的猜測如下:
params 有一個屬性,它允許您不將任何參數傳遞給具有 params 修飾符的參數,因此,
以這種情況為例,如果我不將任何參數傳遞給“pro”,然后嘗試讓 pro 指向“hjk”,那么我實際上會讓“Nothing”指向顯然沒有任何意義的東西。
讓我們試着思考一下為什么這個功能不起作用。
從一個有效的程序開始:
void Main()
{
int x = 1;
Console.WriteLine(Calc(ref x));
Console.WriteLine(x);
}
public int Calc(ref int x)
{
x = 42;
return x + x;
}
這將輸出以下內容:
84
42
現在讓我們想象一下ref params
組合起作用了。 我也許可以這樣寫:
void Main()
{
int x = 1;
int y = 2;
Console.WriteLine(Calc(ref x, ref y));
Console.WriteLine(x);
Console.WriteLine(y);
}
public int Calc(ref params int[] z)
{
z = new int[] { 2, 3, };
return z.Sum();
}
分配z
會導致將2
和3
的值分別分配給x
和y
似乎是合理的。
但是,沒有什么能阻止我寫以下任何內容:
z = new int[] { };
z = new int[] { 2, };
z = new int[] { 2, 3, 4, };
所有這些都會導致x
& y
的分配不起作用。
因此,此功能無法工作。
完成這項工作的唯一方法是確保您有兩個值並且只有兩個值,如果您希望在單個變量中使用它,那么您必須使用元組。
就是這樣:
void Main()
{
(int x, int y) z = (1, 2);
Console.WriteLine(Calc(ref z));
Console.WriteLine(z.x);
Console.WriteLine(z.y);
}
public int Calc(ref (int x, int y) z)
{
z = (2, 3);
return z.x + z.y;
}
這有效並輸出以下內容:
5
2
3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.