错误:非静态字段,方法或属性'Microsoft.Win32.RegistryKey.SetValue(string,object)'需要对象引用

时间:2013-09-01 09:44:34

标签: c# .net

获取此错误An object reference is required for the non-static field, method, or property 'Microsoft.Win32.RegistryKey.SetValue(string, object)',我从注册表中获取了值并尝试使用下面的代码使用新值更新它们,但是它显示了这个错误,我出错了?

private void button2_Click(object sender, EventArgs e)
        {
            txtEmailID.Enabled = true;
            string eid = txtEmailID.Text;
            RegistryKey key = Registry.ClassesRoot;
            RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(@"Software\StudentExam\Protection", true);
            RegistryKey.SetValue("EmailID", eid);//Error at this Line
         }

2 个答案:

答案 0 :(得分:5)

您已创建RegistryKey类的实例。所以它不是一个静态类,但你试图使用该类,因为它是一个静态类。

只需使用您之前初始化的对象(registryKey)即可。

因此,请替换

RegistryKey.SetValue("EmailID", eid);//Error at this Line

registryKey.SetValue("EmailID", eid);

来自MSDN

  

如果要保证它不能被实例化,不能从另一个类型派生或作为其他类型的基础,并且只能包含静态成员,则可以将类定义为静态。

     

因为您无法创建静态类的实例,所以不能使用new关键字来创建类类型的变量。您必须使用类名本身访问静态类的成员。例如,如果你有一个名为UtilityClass的静态类,并且有一个名为MethodA的公共方法,则可以调用它,如下例所示:

UtilityClass.MethodA();

但如果该类不是静态类,那么您可以按如下方式调用该方法:

UtilityClass utility = new UtilityClass();
utility.MethodA();

答案 1 :(得分:0)

我想补充一下Bhushan Firake的回答,虽然大多数时候使用这种命名都很好,但你应该考虑用更有意义的名字命名你的变量。这将有助于您不会遇到这种麻烦,在其他情况下,例如,如果您需要2 RegistryKey来解释每个变量用于什么

阅读here,了解有关使用有意义名称的原因的更多信息。