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尽管代码不长,但我很难理解它。让我试试。非常感谢。