簡體   English   中英

C#初始化局部變量一次

[英]C# Initialize local variable once

我認為我的問題將是完全愚蠢的,但我必須知道答案。

在這種情況下,是否可以初始化變量一次?

    static void Main()
    {
        while (true)
        {
            MethodA();
            MethodB();
        }
    }

    private static void MethodA()
    {
        string dots = string.Empty;    // This should be done only once

        if (dots != "...")
            dots += ".";
        else
            dots = string.Empty;

        Console.WriteLine(dots + "\t" + "Method A");
        System.Threading.Thread.Sleep(500);
    }

    private static void MethodB()
    {
        string dots = string.Empty;    // This should be done only once

        if (dots != ".....")
            dots += ". ";
        else
            dots = string.Empty;

        Console.WriteLine(dots + "\t" + "Method B");
        System.Threading.Thread.Sleep(500);
    }

當然我可以從方法中初始化字符串點,但我不想在代碼中弄亂,而且這也不能在任何其他循環中完成(比如for)。 任何想法如何解決這個或我是如此愚蠢的思考正常?

提前致謝。

編輯:我已經將示例代碼更改為更實用。 期望的輸出應該是:

.    Method A
.    Method B
..   Method A
..   Method B
...  Method A
...  Method B
     Method A
.... Method B
.    Method A
.....Method B

等等

您可以在類中保留dots ,並在創建類時初始化它,即

string dots = string.Empty; 
private void Method()
{
    if (dots != "...")
        dots += ".";
    else
        dots = string.Empty;
}

你說你不想把方法的點放在方法的一邊(在方法的類中),然后你必須從Method返回值,這樣你至少可以在以后傳遞它,從而保持其狀態。

string Method(string dot = string.Empty)
{
   if(dot == "...") return string.Empty;
   else return dot + ".";
}

var result = Method(Method(Method(Method(Method(Method()))))) // etc...

編輯:您編輯的問題不會使您的初始問題更加實用。 它仍然遇到同樣的問題:你想要X但C#沒有X.請改用C ++或VB.NET。

你的問題的答案

“在這種情況下,只能初始化一次變量嗎?”

抱歉,不!

在其他語言(C ++)中,您可以在任何范圍內聲明靜態變量。 這樣可以很好地解決您的問題,但C#不允許在函數內聲明靜態變量。 這實際上是一個C#FAQ: 為什么C#不支持靜態方法變量?

此設計功能意味着您無法在傳統方法中執行所需操作。 你可能能夠做一些特別狡猾的事情,但是如果你不想搞亂現有的程序結構,那就沒問題了。 我確信有一種方法可以編寫可以讓你達到你想要的本機代碼,但感覺這是一個壞主意。

簡而言之,您要求的數據仍然存在於其范圍之外。 在C#中,您的主要(唯一?)補救措施是增加該數據的范圍。

您正在尋找方法調用之間的持久數據,因此您需要在調用之外的數據元素。 您在C#中沒有靜態局部變量。

考慮閱讀此Stackoverflow帖子。

您是否正在考慮使用C ++中的靜態局部變量 他們不是在C#的支持,為討論在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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