C# 可为null检查输入输出变量时无功

C# 可为null检查输入输出变量时无功,c#,C#,这是我的密码: public Boolean TryGetValue(object Key, out object? O) { return //some logic } 当我使用这样的方法时: TryGetValue("Test", out int? Result); Visual Studio报告了一个错误: cannot convert from 'out int?' to 'out object?' 但是,在与我的代码类似的IMemoryCach

这是我的密码:

public Boolean TryGetValue(object Key, out object? O)
{
        return //some logic
}
当我使用这样的方法时:

TryGetValue("Test", out int? Result);
Visual Studio报告了一个错误:

cannot convert from 'out int?' to 'out object?'
但是,在与我的代码类似的
IMemoryCache.TryGetValue中

IMemoryCache.TryGetValue("Test", out int? Result);
可以毫无差错地工作


我的代码怎么了?谢谢。

对象
是一种类类型,您需要改用。

当您在
IMemoryCache
实例上调用
TryGetValue
并传递除
对象
以外的任何类型时,您正在利用一种通用扩展方法:。这就是为什么它适用于
IMemoryCache
而不是您的方法

幸运的是,我们有该扩展的源代码。它所做的只是调用标准的
TryGetValue
方法来获得
对象
结果,然后检查返回值的类型是否适合您的输出变量


您可以对自己的代码采用相同的方法,或者编写自己的通用入口点来处理不同的类型。

您的
TryGetValue
需要一个
out对象。您正在给它一个
out int
。当然,这是行不通的。如果
TryGetValue
为参数指定了一个
string
,该怎么办?请注意,对于
object
int
,这同样会失败-这里的区别不是空性。
out
参数的参数必须具有相同的类型(或标识可转换的类型,例如动态与对象)作为参数本身。您识别的方法可能是静态扩展方法,而不是您链接的接口方法。我识别的扩展方法的源代码:@moreON尽管代码不长,但我很难理解它。让我试试。非常感谢。