Reputation: 23174
I am using C# 8 with .NET framework 4.8
I'm currently guarding against a potential string that can be null with IsNullOrWhitespace
(same problem with IsNullOrEmpty
) , but the compiler is still complaining :
public MyImage? LoadImage(string? filename)
{
if (string.IsNullOrWhiteSpace(filename))
{
return null;
}
return OtherMethod(filename); // here : warning from Visual Studio
}
// signature of other method :
public MyImage OtherMethod(string filepath);
currently, I have workarounds to make the compiler understand :
filename!
#pragma warning disable CS8604 // Possible null reference argument.
if(string == null || string.IsNullOrWhitespace(filename))
But none of the seems satisfactory, mainly because I'll need to repeat the workaround for each call to IsNullOrEmpty
.
Is there any other way to tell the compiler that IsNullOrEmpty effectively guards against null ?
Upvotes: 25
Views: 4401
Reputation: 203
If you don't have .net standard 2.1 or .net core 3, the IsNullOrEmpty is not nullable ready. So, I would create an extension method for this:
#nullable enable
public static class StringExt {
public static bool IsNullOrEmpty([NotNullWhen(false)] this string? data) {
return string.IsNullOrEmpty(data);
}
}
#nullable restore
You also need to activate NotNullWhen attribute like this:
namespace System.Diagnostics.CodeAnalysis
{
[AttributeUsage(AttributeTargets.Parameter)]
public sealed class NotNullWhenAttribute : Attribute {
public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;
public bool ReturnValue { get; }
}
}
Upvotes: 12