C# r看着我的代码,他脱口而出:“那是什么玩意儿?”@jprete:听起来你有一个想法,“静态”是与本地完全相反的东西。但事实并非如此;这些项是正交的。“Static”表示与类型关联,而不是与实例关联,“local”在这里表示在方法的命名空间中,而不是在类型的

C# r看着我的代码,他脱口而出:“那是什么玩意儿?”@jprete:听起来你有一个想法,“静态”是与本地完全相反的东西。但事实并非如此;这些项是正交的。“Static”表示与类型关联,而不是与实例关联,“local”在这里表示在方法的命名空间中,而不是在类型的,c#,C#,r看着我的代码,他脱口而出:“那是什么玩意儿?”@jprete:听起来你有一个想法,“静态”是与本地完全相反的东西。但事实并非如此;这些项是正交的。“Static”表示与类型关联,而不是与实例关联,“local”在这里表示在方法的命名空间中,而不是在类型的命名空间中。[cont]。。。因此,您可以轻松地拥有一个与特定方法的命名空间中的类型(而不是实例)关联的变量,而不是与整个类型的命名空间关联的变量。一个简单的例子是返回随机值的方法。在使用prng时,您通常希望将同一实例保留一段时间。您可以通过


r看着我的代码,他脱口而出:“那是什么玩意儿?”@jprete:听起来你有一个想法,“静态”是与本地完全相反的东西。但事实并非如此;这些项是正交的。“Static”表示与类型关联,而不是与实例关联,“local”在这里表示在方法的命名空间中,而不是在类型的命名空间中。[cont]。。。因此,您可以轻松地拥有一个与特定方法的命名空间中的类型(而不是实例)关联的变量,而不是与整个类型的命名空间关联的变量。一个简单的例子是返回随机值的方法。在使用prng时,您通常希望将同一实例保留一段时间。您可以通过使用prng对象的字段污染类型的私有名称空间来实现这一点,但是绑定到该方法的静态成员可能更合理。我的老板希望我更改它,并说这样做,我们并不是每次需要获取数字列表时都创建一个分配。在编写此代码之前,此方法是创建一个int的通用列表,使用foreach并将1-31添加到列表中。他说,通过我这样做,我每次都在为该列表创建一个新实例/分配。你的老板是对的,尽管差别很小。小到足以让我个人将datetime值作为参数,并使用Enumerable.Range()返回特定月份的天数。这样做有很多很好的理由。一个简单的例子是返回随机值的方法。在使用prng时,您通常希望将同一实例保留一段时间。您可以通过使用prng对象的字段污染类型的私有名称空间来实现这一点,但是绑定到该方法的静态成员可能更合理。我的老板希望我更改它,并说这样做,我们并不是每次需要获取数字列表时都创建一个分配。在编写此代码之前,此方法是创建一个int的通用列表,使用foreach并将1-31添加到列表中。他说,通过我这样做,我每次都在为该列表创建一个新实例/分配。你的老板是对的,尽管差别很小。小到足以让我个人将datetime值作为参数,并使用Enumerable.Range()返回特定月份的天数。在第二个示例中,由于不能向方法添加静态局部变量,这真的节省了内存分配吗?怎么用?什么时候调用方法外部的局部变量并在内存中创建int?如果这是在一个静态类中,并且我使用该类调用示例2中的方法,那么它只执行一次吗?是的,它将保存分配。但是一个更重要的优化是返回一个IEnumerable(Enumerable.Range(1,31)),所以现在是我的问题。在第二个示例中,由于不能向方法添加静态局部变量,这真的节省了内存分配吗?怎么用?什么时候调用方法外部的局部变量并在内存中创建int?如果这是在一个静态类中,并且我使用该类调用示例2中的方法,那么它只执行一次吗?是的,它将保存分配。但更重要的优化是返回IEnumerable(Enumerable.Range(1,31))
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;
}
public static IEnumerable<DateTime> 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) );
}