我有一个要求,其中我在Viewbag.Keyword中有一个像“Johnson and Jen”的值,所以我必须拆分这个值并将它与List进行比较。
我正在尝试以下代码,但是在某些方面或其他方面遇到错误(例如;这是char而不是字符串等等)并且根据框架4.5中可用的最新功能,它看起来不像智能编码
var str = Convert.ToString(ViewBag.Keyword);
string[] str1 = str.Split(' ');
for (int j = 0; j < str1.Length;j++)
{
string str2 = Convert.ToString(str[j]);
if (result.Document.ContactName.IndexOf(str2,
StringComparison.CurrentCultureIgnoreCase) != -1)
注意:“ContactName”是字符串。 请帮助一些可以提高性能的最新代码。
答案 0 :(得分:1)
您可以使用linq
来检查result.Document.Name
contains
来自数组的单词。
var str = Convert.ToString(ViewBag.Keyword);
string[] str1 = str.Split(' ');
var names = str1.Where(x => (result.Document.ContactName.Contains(x))).ToList();
答案 1 :(得分:1)
您可以将这些名称与下面的字符串进行比较,
记住比较是区分大小写的
var str = Convert.ToString(ViewBag.Keyword);
string[] str1 = str.Split(' ');
if(str1.Any(result.Document.ContactName.Contains)){
//Do Something
}
示例 -
var str = "Johnson and Jen";
string[] str1 = str.Split(' ');
string result = "Jendasdbnoahsdasnd"; // I assume your ContactName result is like this
if (str1.Any(result.Contains)) // This gives true because Jen in the string
{
//Do Something
}
但是,对于string result = "jendasdbnoahsdasnd"
,由于这种情况,它会给出错误。
答案 2 :(得分:0)
以下是使用干净代码
执行相同操作的示例代码var str = Convert.ToString(ViewBag.Keyword);
var possibleNames = str.split(' ');
//to check if any match exists
bool anyMatch = possibleNames.Any(n => n.Equals(result.Document.ContactName, StringComparison.InvariantCultureIgnoreCase));
//get matched names
var matchedNames = possibleNames.Where(n => n.Equals(result.Document.ContactName, StringComparison.InvariantCultureIgnoreCase));
//do whatever you want with matchedNames now
var array = matchedNames.ToArray();
var list = matchedNames.ToList();
答案 3 :(得分:0)
您可以使用另一个字符串"Johnson and Jen"
拆分字符串" and "
,这样就可以准确地为您提供适合检查联系人姓名的名称。
要检查属性是否包含指定的字符串,您可以使用IndexOf
方法 - 下面给出了一个简单的示例代码段,您可以运行此示例代码段here。
var keyword = "Johnson and Jen";
var arr = keyword.Split(new string[] { " and " }, StringSplitOptions.None);
var contactName = "Johnson";
for (var i = 0; i < arr.Length; i++)
{
if (contactName.IndexOf(arr[i], StringComparison.OrdinalIgnoreCase) >= 0)
{
// do something
Console.WriteLine("contactName contains the string \"" + arr[i] + "\"");
}
}
您的方案的代码段如下所示,在您的代码中,您不需要不必要的类型转换,即string str2 = Convert.ToString(str[j]);
因为str[j]
已经是字符串
var keyword = Convert.ToString(ViewBag.Keyword);
var arr = name.Split(new string[] { " and " }, StringSplitOptions.None);
for (int i = 0; i < arr.Length; i++)
{
if (result.Document.ContactName.IndexOf(arr[i], StringComparison.OrdinalIgnoreCase) != -1)
{
// do something
}
}
使用StringComparison
参数及其值StringComparison.OrdinalIgnoreCase
将执行不区分大小写的搜索
答案 4 :(得分:0)
If you need to check for the exact match of the words you get by splitting the keyword string using a white space against the contact name property from the collection then you can use a regular expression to do that.
The regular expression is of the form \bTheWordGoesHere\b
where \b
is the word boundary delimiter
Check this sample code snippet.
var keyword = "Johnson and Jen";
var arr = keyword.Split(' ');
var contactName = "Johnson anderson mobile";
for (var i = 0; i < arr.Length; i++)
{
var pattern = string.Format("\\b{0}\\b", arr[i]);
if (Regex.IsMatch(contactName, pattern, RegexOptions.IgnoreCase))
{
// do something
Console.WriteLine("contactName contains the word \"" + arr[i] + "\"");
}
}