String.Contains匹配意外值

时间:2016-12-09 08:44:53

标签: c# .net linq

我有对象列表,我正在寻找具有指定任务名的对象。大多数情况下,它没有任何问题。但是..如果我在taskname中寻找包含它的对象:

  

31022000-1-00

它使用taskname:

返回对象
  

** ******** 31021242-1-00

还有更多相同问题的案例。但正如我所说,它主要是返回正确的值。

我的代码:

if (ProjectTasks.Count(t => t.Name.Contains(task.Name)) == 1)
            {
                ProjectTask MatchingTask = ProjectTasks.FirstOrDefault(t => t.Name.Contains(task.Name));

                UpdateTask(task, MatchingTask);
            }

我做错了什么?有什么想法吗?

2 个答案:

答案 0 :(得分:-1)

您正在使用Contains,因此行为是预期的。如果您需要完全匹配,请改用Equals。

ProjectTask MatchingTask = ProjectTasks.FirstOrDefault(t => t.Name.Equals(task.Name));
if (MatchingTask != null)
{             
     UpdateTask(task, MatchingTask);
}

答案 1 :(得分:-1)

为什么在只有一个具有匹配名称的任务的情况下采取行动?还有更多吗?如果不是 - 你可能应该重构你的代码

var MatchingTask = ProjectTasks.FirstOrDefault(t => t.Name.Contains(task.Name));
    if (MatchingTask !=null){
         UpdateTask(task, MatchingTask);             

 }