C# 将int转换为bool时,Generic失败

C# 将int转换为bool时,Generic失败,c#,generics,C#,Generics,我有以下方法在注册表中搜索(别担心,这是一个使用泛型的测试): private static T GetValue(注册表项、字符串名) { 使用(键) { return(T)key.GetValue(name); } } 但是当使用type:Nullable时,由于强制转换无效而失败。 (我只试过数字键) 我想要的是,如果密钥不存在,则设置null;如果0存储在中,则设置false;或者设置trueelse 我怎样才能做到这一点 谢谢 也许你可以停下来使用魔法施法代码。并且显式地强制转换,所

我有以下方法在注册表中搜索(别担心,这是一个使用泛型的测试):

private static T GetValue(注册表项、字符串名)
{
使用(键)
{
return(T)key.GetValue(name);
}
}
但是当使用type:
Nullable
时,由于强制转换无效而失败。 (我只试过数字键)

我想要的是,如果密钥不存在,则设置
null
;如果0存储在中,则设置
false
;或者设置
true
else

我怎样才能做到这一点


谢谢

也许你可以停下来使用魔法施法代码。并且显式地强制转换,所以您将始终得到您想要的。

因为泛型不能利用特定于类型的行为,所以向泛型类型参数的强制转换或从泛型类型参数的强制转换被假定为向上/向下转换

向下广播在此失败,您需要转换


您可以尝试使用
Convert
类,但最好使类型参数与注册表类型匹配。

如果您需要此类特定行为(
null
如果
null
false
如果为0,
true
否则)那么,如果T不是
bool?

,那么您的泛型方法将返回什么呢?因为您需要基于返回类型(
bool?
)和键类型(数字)的非常具体的行为,为什么您认为这应该是一种通用方法?将强制转换插入到
dynamic
可能会有所帮助。不太熟悉通过C#浏览注册表,但为什么您希望在获取值后处理键。看起来这个方法并没有真正描述它的功能。@JonSkeet:这就是为什么我说这是一个测试,我不是想实现一些特殊的功能,只是知道如何“专门化”布尔运算的类型(如果可以的话)。同意。泛型不能很好地适应这种情况。很抱歉,但是魔术演员代码总有一天会失败。显式永远不会失败,因为编译器无法生成。这也没有意义,他已经在进行显式转换。抱歉。在这个意义上我没有使用显式。我用了另一种意思,但如果我继续,没有人会理解我试图解释的内容。@Toto,那么最好删除你的答案。我看起来像是在乎徽章吗?:D
private static T GetValue<T>(RegistryKey key, string name)
{
    using (key)
    {
        return (T)key.GetValue(name);
    }
}