0

收到此错误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
         }
4

2 回答 2

5

您已经创建了一个RegistryKey类的实例。所以它不是一个静态类,但你正在尝试使用这个类,因为它是一个静态类。

registryKey只需使用您之前初始化的 object( ) 就可以了。

因此,更换

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

registryKey.SetValue("EmailID", eid);

来自MSDN

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

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

UtilityClass.MethodA();

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

UtilityClass utility = new UtilityClass();
utility.MethodA();
于 2013-09-01T09:46:03.590 回答
0

我想补充一下 Bhushan Firake 的回答,虽然大多数时候使用这种命名就很好,但您应该考虑用更有意义的名称命名变量。这将帮助您避免陷入这种麻烦,以及在其他情况下,例如,如果您需要 2RegistryKey来解释每个变量的用途

阅读此处以获取有关为什么应该使用有意义的名称的更多信息。

于 2013-09-01T09:52:30.833 回答