通知resharper如果函数返回false,则out变量将仅为null;

时间:2017-09-07 02:03:32

标签: c# null resharper contracts

我有以下函数,该函数遵循TryGet模式,带有out参数,如果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。如果函数返回false,我怎么能告诉resharper它只会为null?

编辑我怀疑我可以用ContractAnnotation以某种方式解决这个问题,但不确定语法。

1 个答案:

答案 0 :(得分:1)

如果在函数返回false时使用该值,则以下契约注释会导致resharper仅警告null引用

[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);
}