46

你可以在静态方法中有一个静态变量吗?该变量的值是否会在对该方法的所有调用中保留?

例如。

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

3 回答 3

42

不。

你不能有局部静态变量。

来自MSDN

C# 不支持静态局部变量(在方法范围内声明的变量)。

这里:

static 修饰符可以与类、字段、方法、属性、运算符、事件和构造函数一起使用,但不能与索引器、析构函数或类以外的类型一起使用。

如您所见,提及局部变量。


但是,您可以使用静态字段:

public class MyClass
{
    private static int MyVariable = 10;

    public static void MyMethod()
    {
        MyVariable++;
    }
}
于 2010-12-24T10:13:46.507 回答
9

不,但您可以:

private static int x = 0;
public static void MyMethod()
{
     x++;
} 
于 2010-12-24T10:18:11.680 回答
0

这是一种完成你想要做的事情的黑客方式。变成MyMethodAction上创建闭包的x。该变量x仅对最里面的委托可见,并且表现得像一个静态变量。如果有人对改进此模式有任何建议,请告诉我。

public static readonly Action MyMethod = new Func<Action>(delegate ()
{
    var x = 0;
    return delegate () { x++; };
}).Invoke();

//example usage:
public void Init() {
    MyMethod();
}
于 2022-01-16T05:05:23.280 回答