无法在静态方法中创建静态变量?

为什么这不起作用?

public static int[] GetListOfAllDaysForMonths() { static int[] MonthDays = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; return MonthDays; } 

我不得不在方法之外移动变量声明:

  static int[] MonthDays = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; public static int[] GetListOfAllDaysForMonths() { return MonthDays; } 

另外,通过这种方式创建它,我们只有一个这个数组的实例在内存中浮动? 此方法位于静态类中。

C#根本不支持静态本地。 静态的任何东西都需要是类型或类型本身的成员(即静态类)。

顺便说一句,VB.Net确实支持静态本地,但它是通过在编译时重写代码将变量移动到类型级别(并使用Monitor类锁定初始赋值以实现基本线程安全性)来实现的。

[接受后补遗]
就个人而言,您的代码示例对我来说看起来毫无意义,除非您将其与实际月份联系起来。 我会做这样的事情:

 public static IEnumerable GetDaysInMonth(DateTime d) { d = new DateTime(d.Year, d.Month, 1); return Enumerable.Range(0, DateTime.DaysInMonth(d.Year, d.Month)) .Select(i => d.AddDays(i) ); } 

另请注意,我没有使用数组。 在.Net中应该避免使用数组,除非你真的知道为什么要使用数组而不是其他东西。

您只能在类/ struct范围中创建静态变量。 它们是静态的,意味着它们是在类型(而不是方法)上定义的。

这就是C#使用术语“静态”的方式,这与在某些其他语言中使用“静态”的方式不同。

在方法中声明的静态变量的范围是什么? 我不认为CLR支持方法静态变量,是吗?

好吧,除了没有得到支持,你为什么要这样做? 如果你需要在方法中定义一些东西,它有局部范围,显然不需要更多。