List.Contains() doesn't detects a string

前端 未结 3 640
眼角桃花
眼角桃花 2021-01-25 09:44

As the title says my list \"Cvqt\" contains different strings for example \"1 maxHearts Player\" and I\'m trying to check if it contains \" maxHearths \" + na

相关标签:
3条回答
  • 2021-01-25 09:56

    When you do Contains on a List<string> it only checks if the list contains a string that is a exact match to what you are passing in, it will not do a partial match.

    If you want partial matches you need to do something more complicated like

    if (Cvqt.Any(x=>x.Contains(" maxClubs " + name)))
    {
        Cvqt.Remove(maxClubs.ToString() + " maxClub " + name);
    }
    

    or

    var item = Cvqt.FirstOrDefault(x => x.Contains(" maxClubs " + name));
    if (item != null)
    {
        Cvqt.Remove(item);
    }
    

    if you want to remove the found item instead of the specific string using maxClubs.

    What those two methods do is call String.Contains on each item instead of List<T>.Contains on the entire list, which is what you where doing. Doing a List<T>.Contains(T t1) is the same as doing a Object.Equals(T t1, T listItem) on each item in the list.

    0 讨论(0)
  • 2021-01-25 10:11

    Contains as it pertains to a List object looks for the entire string in a list of strings.

    You are looking for "max clubs" as a substring. That is the "Contains" off the string object

    Example:

    List<string> x = new List<string>(){"Hello", "goodbye"};
    bool y = x.Contains("good"); // will be false
    y = x.Contains("goodbye"); // will be true
    
    y = x[0].Contains("Hell"); // will be true
    

    You're probably looking for something like this:

    List<string> stringsWithMaxClubs = Cvqt.Where(argString => argString.Contains(" maxClubs " + name)).ToList();
    
    0 讨论(0)
  • 2021-01-25 10:12

    Your list contains strings in the form of maxClubs + " maxClubs " + name while you're searching for " maxClubs " + name. There will be no element in your list that exactly matches this (unless maxClubs is an empty string).

    You can use Linq Any for what you want:

    if (Cvqt.Any(x => x.Contains(" maxClubs " + name)))
    {
    }
    
    0 讨论(0)
提交回复
热议问题