我认为我的问题将是完全愚蠢的,但我必须知道答案。
在这种情况下,是否可以初始化变量一次?
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
等。等
答案 0 :(得分:3)
您可以在班级中保留dots
,并在创建班级时对其进行初始化,即
string dots = string.Empty;
private void Method()
{
if (dots != "...")
dots += ".";
else
dots = string.Empty;
}
答案 1 :(得分:3)
你说你不想把方法(在方法的类中)的点放在一边,然后你必须从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。
您问题的答案
“在这种情况下,是否可以只初始化一次变量?”
抱歉,不!
答案 2 :(得分:2)
在其他语言(C ++)中,您可以在任何范围内声明静态变量。这样可以很好地解决您的问题,但C#不允许在函数内声明静态变量。这实际上是一个C#FAQ:Why doesn't C# support static method variables?。
此设计功能意味着您无法在传统方法中执行所需操作。你可能能够做一些特别狡猾的事情,但是如果你不想搞乱现有的程序结构,那就没问题了。我确信有一种编写本机代码的方法可以让你达到你想要的效果,但感觉这是一个坏主意。
简单地说,你要求的数据仍然存在于其范围之外。在C#中,您的主要(唯一?)补救措施是增加该数据的范围。
答案 3 :(得分:1)
您正在寻找方法调用之间的持久数据,因此您需要调用之外的数据元素。 C#中没有静态局部变量。
答案 4 :(得分:0)
你在想static local variable as in C++吗?它们在C#中不受支持,如here所述。