1.主要问题还是在这里,这个digitalProductId没有获取到值,因此是null
2.而这个变量的值作为参数传递到了DecodeProductKey()方法。这下子问题就出现了,因为这个的值是null,所以执行完for循环内的hexPid.Add(digitalProductId);后通过调试也发现,hexPid里的值也全是null。
3.因此执行int byteValue = (digitMapIndex << 8) | (byte)hexPid[j];时报错说未将对象引用设置到对象的实例。实际上就是因为(byte)hexPid[j]这部分是null的原因。
4.解决方法:通过观察GetValue()方法的注释发现,因为注册表里不存在名称/值对,所以才返回null。因此去看一下注册表里的这个值是否存在吧。
5.PS:以上操作只是我复制代码后直接操作的,所以我的注册表什么的都是原样,可能对代码会存在一些影响。但我给出的问题大概存在位置是可以确定的。一个小技巧:通常报“未将对象引用设置到对象的实例”,多半是某个变量或对象的值为null。
兄弟,你慢慢调吧,设断点。值为0应该不会报这个错,为null才会报