c#: static variable in a static method
Can you have a static variable in a static method? Would the value of this variable be prese开发者_运维问答rved across all calls to the method?
eg.
public static void MyMethod()
{
static int x = 0;
x++;
}
No.
You can't have local static variables.
From MSDN:
C# does not support static local variables (variables that are declared in method scope).
And here:
The static modifier can be used with classes, fields, methods, properties, operators, events, and constructors, but it cannot be used with indexers, destructors, or types other than classes.
As you can see, local variables are not mentioned.
You can, however use a static field:
public class MyClass
{
private static int MyVariable = 10;
public static void MyMethod()
{
MyVariable++;
}
}
No, but you could have:
private static int x = 0;
public static void MyMethod()
{
x++;
}
Here is sort of a hackish way to accomplish what you're trying to do. Turn MyMethod
into an Action
that creates a closure on x
. The variable x
will only be visible to the innermost delegate, and behaves like a static variable. If anyone has any suggestions for improving this pattern let me know.
public static readonly Action MyMethod = new Func<Action>(delegate ()
{
var x = 0;
return delegate () { x++; };
}).Invoke();
//example usage:
public void Init() {
MyMethod();
}
精彩评论