簡體   English   中英

使用 ref 或 out 修飾符和 params 修飾符 C#

[英]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會導致將23的值分別分配給xy似乎是合理的。

但是,沒有什么能阻止我寫以下任何內容:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM