c# - 在 .Net Standard 2.0 中替换 string.Contains(string, StringComparison)
问题描述
考虑以下代码:
public static IQueryable<T> WhereDynamic<T>(this IQueryable<T> sourceList, string query)
{
if (string.IsNullOrEmpty(query))
{
return sourceList;
}
try
{
var properties = typeof(T).GetProperties()
.Where(x => x.CanRead && x.CanWrite && !x.GetGetMethod().IsVirtual);
//Expression
sourceList = sourceList.Where(c =>
properties.Any(p => p.GetValue(c) != null && p.GetValue(c).ToString()
.Contains(query, StringComparison.InvariantCultureIgnoreCase)));
}
catch (Exception e)
{
Console.WriteLine(e);
}
return sourceList;
}
我创建了一个 .Net Standard 2.0 类型的项目,我想在其中使用上面的代码。但问题是不能使用这个重载:
.Contains method (query, StringComparison.InvariantCultureIgnoreCase)
它不存在。在 .NET Core 项目中,没有问题。对于方法的重载,您有解决方案或替代方案Contains()
吗?
解决方案
您可以使用IndexOf
aStringComparison
,然后检查结果是否为非负数:
string text = "BAR";
bool result = text.IndexOf("ba", StringComparison.InvariantCultureIgnoreCase) >= 0;
可能会有一些非常小众的极端情况(例如,具有零宽度非连接字符),它们会给出不同的结果,但我希望它们在几乎所有情况下都是等价的。话虽如此,GitHub 上的 .NET Core 代码表明Contains
无论如何都是以这种方式实现的。
推荐阅读
- django - Django rest framework serializer dynamic fields with many=True
- sql - 将 Varchar 转换为 Date 类型(不仅仅是运行查询,实际上是更改表上的列)
- matlab - 多边形地图中的边框颜色显示 MatLab
- python - I'm having trouble with a Python Snake game using curses
- c - 在 MATLAB coder 中使用自定义 C 结构体
- python - Python Tkinter 获取 askopenfilenames() 的结果
- laravel-backpack - 我应该使用什么 addField 类型?
- node.js - 我可以使用@google-cloud/logging Node.js 库来获取按日期过滤的条目吗?
- c# - Create a list of C# Funcs with different parameter types
- java - 在类路径资源中定义名称为“defaultServletHandlerMapping”的 bean 创建错误