通知 resharper out 变量只有在函数 returns false 时才会为 null;
Inform resharper that an out variable will only be null if the function returns false;
我有以下函数,它遵循带有输出参数的 TryGet 模式,如果 null 将 return false,如果不为 null,它将 return 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 可能为空。我怎么能告诉 resharper 只有当函数 returns false 时它才会为空?
编辑我怀疑我可以用 ContractAnnotation 以某种方式处理这个问题,但不确定语法。
如果您在函数返回 false 时使用该值,以下契约注释会导致 resharper 仅警告空引用
[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);
}
我有以下函数,它遵循带有输出参数的 TryGet 模式,如果 null 将 return false,如果不为 null,它将 return 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 可能为空。我怎么能告诉 resharper 只有当函数 returns false 时它才会为空?
编辑我怀疑我可以用 ContractAnnotation 以某种方式处理这个问题,但不确定语法。
如果您在函数返回 false 时使用该值,以下契约注释会导致 resharper 仅警告空引用
[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);
}