C# 比较字符串未按预期工作
考虑以下代码片段C# 比较字符串未按预期工作,c#,asp.net-mvc,C#,Asp.net Mvc,考虑以下代码片段 var query = (from a in db.MyEntity where a.MyEntityId == id select a.Team).FirstOrDefault(); string userName = userDto.UserName.Replace('.', ' '); string[] teamArray = query.Split(new char[]
var query = (from a in db.MyEntity
where a.MyEntityId == id
select a.Team).FirstOrDefault();
string userName = userDto.UserName.Replace('.', ' ');
string[] teamArray = query.Split(new char[] { ',' });
for (int i = 0; i < teamArray.Count(); i++)
{
if (!teamArray[i].Contains(userName, StringComparison.OrdinalIgnoreCase))
{
return View("Unauthorized");
}
}
但它似乎在检查每一个用户名
是的,这正是你在这里所做的
string[] teamArray = query.Split(new char[] { ',' });
for (int i = 0; i < teamArray.Count(); i++)
{
if (!teamArray[i].Contains(userName, StringComparison.OrdinalIgnoreCase))
{
return View("Unauthorized");
}
}
因此,请使用此teamArray.Contains(…)
检查userName
是否在您的teamArray
中,请参见以下内容:
public static bool Contains(string source, string toCheck)
{
var results = Array.FindAll(source.split(','), s => s.Equals(toCheck));
if(results.Length > 0)
return true;
else
return false;
}
谢谢。那么我是否应该创建一个
IEnumerable
?如果你不知道,你能举个例子吗mind@Code您的teamArray
是一个IEnumerable
。只需将您的for
循环替换为我的上一个代码段。我按照您的建议执行了操作,并收到以下错误消息“string[]”不包含“Contains”的定义,并且最佳扩展方法重载“Queryable.Contains”(IQueryable,string,IEqualityComparer)'需要'IQueryable')类型的接收器。
@code奇怪,可枚举。Contains(此IEnumerable…
在系统.Linq
命名空间中声明。您的使用列表中是否有此命名空间?这是一个普通的linq扩展。是的,我确实在我的列表中使用了它
string[] teamArray = query.Split(new char[] { ',' });
if (!teamArray.Contains(userName, StringComparer.OrdinalIgnoreCase))
return View("Unauthorized");
public static bool Contains(string source, string toCheck)
{
var results = Array.FindAll(source.split(','), s => s.Equals(toCheck));
if(results.Length > 0)
return true;
else
return false;
}