【问题标题】:C#: Changing an element from list to uppercase if it contains particular letter in itC#:如果元素中包含特定字母,则将元素从列表更改为大写
【发布时间】:2020-02-16 22:35:48
【问题描述】:

我有列表,如果它们包含特定字母,需要将它们设为大写。

我尝试使用mean.ToString().ToUpper().Contains("g");,但它不起作用。

    static void Main(string[] args)
    {           

        List<string> mean = new List<string>() { "dog", "smile", "cat", 
        "bat", "giraffe"};
        // e.g. values containing letter "g" have to be changed to uppercase
        // "dog" and "giraffe" should be changed to UPPERCASE


        foreach (string s in mean)
        {
            Console.WriteLine(s);
        }
    }

【问题讨论】:

    标签: c# list arraylist


    【解决方案1】:

    您可以使用 Linq 和一个简单的三元组来完成此操作:

    static void Main(string[] args)
        {
            List<string> mean = new List<string>() { "dog", "smile", "cat", "bat", "giraffe"};
            mean.RemoveAll(item => item.Contains("t"));
            mean = mean.Select(item => item.Contains("g") ? item.ToUpper() : item).ToList();
    
            foreach (string s in mean)
            {
                Console.WriteLine(s);
            }
        }
    

    Select 方法将获取列表中的每个元素并对其执行操作。在这种情况下,我们只想在元素包含“g”时执行操作。这就是三元组的用武之地。如果项目包含“g”,我们返回item.ToUpper(),否则我们只返回item。由于 select 语句的输出是 IEnumerable&lt;string&gt;,因此我们需要对其调用 ToList() 方法,以便将值分配回 mean。

    以上代码的输出为:

    DOG smile GIRAFFE

    【讨论】:

    • mean = mean.ConvertAll(item =&gt; item.Contains("g") ? item.ToUpper() : item);这个方法使用正确吗?
    • 是的,这行得通。虽然,Select 是最受欢迎的方法,因为它也可以与 IEnumerables 一起使用,你会发现它在 c# 中出现了很多。如果你真的想去除对 Linq 的依赖,你可以使用ConvertAll 来获得相同的结果。请参阅this Stackoverflow question 了解更多信息
    • 另外,如果您希望得到一个大写字母,请确保在Contains("g") 之前添加ToLower()。
    【解决方案2】:

    在您将它转换为 大写 G

    mean.ToString().ToUpper().Contains("g");
    

    应该是

    mean.ToString().ToUpper().Contains("G");
    

    甚至更好

    mean.IndexOf("g", StringComparison.InvariantCultureIgnoreCase) >= 0
    

    【讨论】:

      【解决方案3】:

      在foreach 中,您不使用mean.ToString().ToUpper().Contains("g");,而是使用s,因为mean 是列表,所以是的,它不起作用。

      另外,.ToString().ToUpper().Contains("g") ToUpper() 这里将把字符串 UpperCase 所以 .Contains("g") 也应该是大写的。

      你可以这样做:

      foreach (string s in mean)
      {
          if (s.ToLower().Contains("g"))
              Console.WriteLine(s.ToUpper());
      }
      

      或者如果你喜欢 Linq:

      // Linq
      
      var result = mean.Where(e => e.ToLower().Contains("g")).Select(x => x.ToUpper()).ToList();
      
      foreach (var s in result)
      {
          Console.WriteLine(s);
      }
      

      【讨论】:

        猜你喜欢
        • 2020-06-17
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 2014-10-08
        • 2021-10-30
        • 1970-01-01
        • 2015-10-10
        相关资源
        最近更新 更多