Reputation: 807
Can you have a static variable in a static method? Would the value of this variable be preserved across all calls to the method?
eg.
public static void MyMethod()
{
static int x = 0;
x++;
}
Upvotes: 56
Views: 58380
Reputation: 3528
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();
}
Upvotes: 1
Reputation: 498932
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++;
}
}
Upvotes: 54
Reputation: 6834
No, but you could have:
private static int x = 0;
public static void MyMethod()
{
x++;
}
Upvotes: 12