Rol*_*ain 3 c# asp.net visual-studio-2022 c#-10.0
我对收到的警告感到有些困惑。这是相关代码:
#nullable enable
public partial class FileTable<TItem> : ComponentBase, IDisposable
{
// bunch of class code
public async Task FilterColumn(Func<TItem, IComparable>? itemProperty, string? searchString)
{
ArgumentNullException.ThrowIfNull(ViewItems);
if (itemProperty == null)
return;
if (searchString == null)
searchString = string.Empty;
await Task.Run(() =>
{
foreach (var item in ViewItems)
{
var property = itemProperty(item.Item);
if (property == null)
continue;
item.IsVisible = property.ToString().ToLower().Contains(searchString.ToLower());
}
});
StateHasChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
我收到警告property.ToString()如您所见,我已经添加了一堆空检查,但似乎没有一个可以消除警告。据我所知,现在是不可能property的。null显然我错过了一些东西......那么什么可能触发这个警告呢?
问题是ToString()可以返回null;这是不好的做法,但是:它可以:
namespace System
{
public class Object
{
// ...
public virtual string? ToString();
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
如果排除以下错误,错误就会消失:
var s = property.ToString() ?? "";
item.IsVisible = s.ToLower().Contains(searchString.ToLower());
Run Code Online (Sandbox Code Playgroud)
另请注意,使用忽略大小写的比较比强制进行额外的字符串分配更有效:
item.IsVisible = s.Contains(searchString, StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)