i具有以下函数,遵循tryget模式的删除param,如果null会返回false,如果不是null,则将返回true
public bool TryGetFileFormat(string extension, [CanBeNull] out IFileFormat fileFormatter)
{
fileFormatter = Plugins?.FirstOrDefault(plugin => plugin?.FileExtension != null && plugin.FileExtension.Equals(extension));
return (fileFormatter != null);
}
我然后使用以下代码调用该函数:
IFileFormat fileFormatPlugin;
if (_pluginLoader.TryGetFileFormat(extension, out fileFormatPlugin))
{
fileFormatPlugin.DoStuff();
resharper然后警告我,fileformatplugin可能为null。我该如何告诉resharper,只有在函数返回false时才为null?
编辑我怀疑我可以以某种方式处理合同信号,但不确定语法。
以下合同注释会导致resharper仅警告null参考,如果您在函数返回false false
时使用该值[ContractAnnotation("fileFormatter : null => false")]
public bool TryGetFileFormat(string extension, [CanBeNull]out IFileFormat fileFormatter){
fileFormatter = Plugins?.FirstOrDefault(plugin => plugin?.FileExtension != null && plugin.FileExtension.Equals(extension));
return (fileFormatter != null);
}