在C#中存在一个问题:没有不区分大小写的String.Contains方法(请参阅不区分大小写的'包含(字符串)').
在VB.NET中问题是一样的,但有一个解决方法:
Dim Str As String = "UPPERlower"
Dim b As Boolean = InStr(Str, "UpperLower")
Run Code Online (Sandbox Code Playgroud)
但是,我对它几乎没有"问题":
1)在Visual Studio 的立即窗口中,此方法显示为"未声明";
2)如何动态调用此方法(应该是"调用者"对象)?说实际上我应该这样称呼它:
expr = Expression.Call(myStringParam, "Contains", Nothing, constantExpression, Expression.Constant(StringComparison.InvariantCultureIgnoreCase))
Run Code Online (Sandbox Code Playgroud)
3)功能位于何处(谁拥有,组装)InStr?
下面的代码有效,但我想介绍一下 ToUpper()
var predicate =
Expression.Lambda<Func<T, bool>>(
Expression.Call(
Expression.PropertyOrField(parameter, "FirstName"),
"Contains", null,
Expression.Constant("myvalue".ToUpper())), parameter
);
Run Code Online (Sandbox Code Playgroud)
结果是:
{Param_0 => Param_0.FirstName.Contains("MYVALUE")}
Run Code Online (Sandbox Code Playgroud)
但是我喜欢这个:
{Param_0 => Param_0.FirstName.ToUpper().Contains("MYVALUE")}
Run Code Online (Sandbox Code Playgroud)
我该怎么改变?
我收到了一个应用程序的崩溃报告,该应用程序尝试从之前编写的文件中读取XML.在请求用户将文件发送给我之后,我将其与应该写的文件进行了比较,发现了一个我之前没有遇到过的奇怪问题.
一些(但不是全部)i角色已被替换为?- 无点的我.例如,一个名为"title"的节点很好,但名为"initialdirectory"的节点有第一个被替换,第二个被单独留下,即?nitialdirectory.
直到今天,我甚至都不知道有这样一个角色,但现在我做了,我只是不知道它是如何编写的那样 - XML是XmlWriter用UTF8编码编写的.只是一般的日常写作,没有什么复杂的.
我通常(好吧,因为得到Resharper并且它在跳过参数StringComparison.OrdinalIgnoreCase时对我大吼大叫)在做IndexOf等时使用,但我在编写数据时应该如何做到这一点我不知所措,除非我应该开始改变线程文化.
以前有没有人遇到类似的问题,如果有的话,最好的方法是什么?
这是我使用 LINQ 的第一步。我有两个过滤器列表作为参数,也可以为空。如果我以这种方式执行代码,我不会从空列表中返回任何值。
如果要忽略空列表,代码必须是什么样子?
public List<PersonDTO> GetPersons(int pageNumber, int pageSize, List<string> departments, List<string> locations, string filterText)
{
if (filterText == null)
{
filterText = "";
}
List<Person> personsList = _dbContext.Persons
.Where(a => (a.firstName.ToLower().Contains(filterText.ToLower()) || a.lastName.ToLower().Contains(filterText.ToLower()))
&& departments.Contains(a.department)
&& locations.Contains(a.location))
.Skip(pageNumber * pageSize).Take(pageSize).ToList();
return _mapper.Map<List<PersonDTO>>(personsList);
}
Run Code Online (Sandbox Code Playgroud) 我需要检查 Enum 中存在的字符串值或不使用Contains.
public enum Days
{
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
Sunday = 7
}
public class ResultObj
{
public int Id { get; set; }
public string Name { get; set; }
}
var filter = "Wed";
var dayList = Enum.GetValues(typeof(Days))
.Cast<Days>()
.Where(x => Enum.IsDefined(typeof(Days), filter))
.Select(d => new ResultObj
{
Id = (int)d,
Name = d.ToString()
}).ToList();
Run Code Online (Sandbox Code Playgroud)
如果给出“周三”的意思,我需要一个 dayList 结果为{ Id …
我有一个List<List<string>>,当我尝试搜索List<string>它时,它返回没有结果.
有任何想法吗?
谢谢
List<List<string>> test = new List<List<string>>();
List<string> ff = new List<string>();
ff.Add("1");
ff.Add("ABC 1");
test.Add(ff);
ff = new List<string>();
ff.Add("2");
ff.Add("ABC 2");
test.Add(ff);
var result = test.Where(x=>x.Contains("ABC"));
//result.Count(); is 0
Run Code Online (Sandbox Code Playgroud) 我有一个列表,其中包含需要排除的单词列表。
我的方法是有一个包含这些单词的列表并使用 Linq 进行搜索。
List<string> lstExcludeLibs = new List<string>() { "CONFIG", "BOARDSUPPORTPACKAGE", "COMMONINTERFACE", ".H", };
string strSearch = "BoardSupportPackageSamsung";
bool has = lstExcludeLibs.Any(cus => lstExcludeLibs.Contains(strSearch.ToUpper()));
Run Code Online (Sandbox Code Playgroud)
我想找出 lstExcludedLibs 中存在的字符串 strSearch 的一部分。
事实证明,它只.any查找完全匹配的内容。是否有可能使用类似或通配符搜索
这在 linq 中可能吗?
我本可以使用 foreach 和 contains 来实现它,但我想使用 LINQ 来使其更简单。
编辑:我尝试过 List.Contains 但它似乎也不起作用
我正在努力从头开始创建一个数据库.我有一个锯齿状的叫做data数组,我试着克隆(lns)它,克隆(lns)变成小写,所以也data变成了.但我不希望这样!我怎么能阻止这个?ignorecase是真的.如果我将其设置为false,则不再出现问题.
你可能不相信,至少我没有,所以我上传了一个视频.
public string[][] getRows(string[][] data, int columnLength, int index = -1, string arg = "", bool ignoreCase = false, bool getContaining = false)
{
if (index >= columnLength) return null; // I love null!
if (!getContaining && arg == "") return data;
string[][] toReturn = new string[data.Length][];
string[][] lns = data;
int a = 0;
if (ignoreCase)
{
arg = arg.ToLower();
for (int i = 0; i …Run Code Online (Sandbox Code Playgroud) 我的项目工作正常,直到我不得不考虑一个字符串数组而不仅仅是一个......我不知道如何解决这个问题.这Country是此方法所在的当前类的属性.它曾经是一个单独的字符串,但现在是一个数组.
最初它看起来像这样:
private Expression<Func<Payment, bool>> CountryMatches()
{
if (Country.Length < 1) return Skip;
return payment => payment.Country.ToLower().Contains(Country.ToLower());
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚的是如何设置它,以便如果Country匹配中的任何字符串payment.Country...当然这是传回一个表达式...这是我最好的猜测(但显然不正确)如何做我需要做的事:
private Expression<Func<Payment, bool>> CountryMatches()
{
if (Country.Length < 1) return Skip;
return payment => payment.Country.ToLower() == Country.Any().ToLower();
}
Run Code Online (Sandbox Code Playgroud) 我有两个字符串数组,我需要比较相似的字符串.
string[] f1 = {"Ann", "mam", "far", "aBc"};
string[] f2 = {"ann", "nom", "far", "abc"};
Parallel.ForEach(f1, currenFile =>
{
if (f2.Contains(currenFile, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("matchfound"+currenFile);
}
});
Run Code Online (Sandbox Code Playgroud)
我试图看看f2是否包含来自f1忽略大小写的单词.但是,知识产权在"StringComparison.OrdinalIgnoreCase"上有错误
参数类型System.StringComparission不能分配给参数类型Systems.Collections.Generic.IEqualityComparer
请让我知道如何解决此错误.
c# ×10
.net ×5
linq ×5
c#-4.0 ×2
string ×2
.net-core ×1
arrays ×1
culture ×1
enumeration ×1
enums ×1
expression ×1
generics ×1
localization ×1
vb.net ×1
xml ×1