获取此错误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
}
答案 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,了解有关使用有意义名称的原因的更多信息。