Craig Johnston
Craig Johnston

Reputation: 807

c#: static variable in a static method

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

Answers (3)

user3163495
user3163495

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

Oded
Oded

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

Grhm
Grhm

Reputation: 6834

No, but you could have:

private static int x = 0;
public static void MyMethod()
{
     x++;
} 

Upvotes: 12

Related Questions