C# 我的控制器中的非静态字段、方法或属性需要对象引用
可能重复:C# 我的控制器中的非静态字段、方法或属性需要对象引用,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,可能重复: 我有一个非静态字段: private IDictionary<string, string> _mappings = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase) 编译器正在抱怨: 非静态字段、方法或对象需要对象引用 返回语句中的属性 如何引用此字段?您无法从静态成员访问实例成员,因此有2种选择 使该方法成为实例方法(删除static关键字) 将
我有一个非静态字段:
private IDictionary<string, string> _mappings =
new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
编译器正在抱怨:
非静态字段、方法或对象需要对象引用
返回语句中的属性
如何引用此字段?您无法从静态成员访问实例成员,因此有2种选择
static
关键字)static
关键字)您选择的方法将取决于该字段是否应在所有实例中共享。我认为编译器在这里非常清楚:您的GetMimeType方法是静态方法,但_mappings变量不是声明为静态的(非静态或实例字段/变量) 如果要使用上面显示的mappings变量,请执行以下操作:
private static IDictionary<string, string> _mappings = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
private static IDictionary\u mappings=新字典(StringComparer.InvariantCultureInogoreCase)
编辑:正如下面的评论者所指出的,你必须小心,这实际上是你想要的行为。静态成员意味着所有实例将共享此相同的映射变量,并且可以覆盖当前的数据。如果您希望每个类有一个映射变量,那么您应该将方法更改为实例方法(通过删除static关键字),如上面的答案所述。如果您只需要一个值字典,该字典只需填充一次,之后再也不会修改,您可以做的一件事是将字典设置为静态,并将其填充到静态构造函数中。如果没有实例,您就不能<代码>\u映射是仅实例成员
GetMimeType
无法访问实例变量,除非您在方法内创建或传递实例。可能应添加有关如何使携带数据的成员保持静态可能导致意外输出的警告。=)可能应添加关于使数据承载成员保持静态可能导致意外输出的警告。=)说得好。我太懒了。
private static IDictionary<string, string> _mappings = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)