【问题标题】:How do I remove an empty element in an array? [duplicate]如何删除数组中的空元素? [复制]
【发布时间】:2016-02-09 19:48:56
【问题描述】:

我有一个电子邮件地址数组,但一个空字符串被注入到数组的末尾。如何删除数组中的这个元素?

for(int i = 0; i < allToAddresses.Length; i++)
{
    if(allToAddresses[i] == " ") // find where empty element is
    { //Here i am trying to delete that empty element. does not work
       allToAddresses[i].Split("".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
    }
}

【问题讨论】:

  • 如果你总是得到一个空字符串的最终条目,你也应该尝试找出原因,而不是修复数组。假设它是您的代码,或者您可以控制(团队成员)的代码。

标签: c# arrays linq


【解决方案1】:

你可以尝试使用 Linq 来解决这个问题

allToAddresses = allToAddresses.Where(address=>!string.IsNullOrWhiteSpace(address))
                               .ToArray();

你还必须在你的命名空间中包含这个:

using System.Linq;

您使用Where 方法过滤您的初始数组。在此方法中,如果方法 string.IsNullOrWhiteSpace 返回 false,则在此方法中传递返回 true 的谓词。否则返回false。使用此过滤器,您可以丢弃空地址、空地址或仅包含空白字符的地址。

【讨论】:

  • .Where(!string.IsNullOrWhitespace) 不会编译
  • @haim 我的错 :( 感谢您发现我的错字
  • !string.IsNullOrWhiteSpace 也无法编译。错误是:“CS0023 运算符'!'不能应用于“方法组”类型的操作数”
【解决方案2】:
test =  test.Where(x => !string.IsNullOrWhitepace(x)).ToArray();

【讨论】:

  • 他可能需要string.IsNullOrWhitepace(x),因为他的问题包括" ",它不是空的,是空格。
  • string.IsNullOrEmpty(" "); 不起作用,因为它有空格。
  • 是的,对不起,我看过了,是的,在这种情况下,它必须是 NullOrWhitespace。我将编辑答案。很抱歉造成任何混乱。
【解决方案3】:

您不能真正从数组中“删除”元素,因为数组大小是固定的*。但是,您可以构造一个跳过所有空元素的新数组:

allToAddresses = allToAddresses.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();

以上要求在文件顶部使用System.Linq。它检查数组中的所有条目以查看它们是否为空或完全由空格(空格、制表符等)组成,并生成一个新的字符串数组,其中仅包含原始数组中的非空/非空条目。

*为了全面披露,.NET 确实有an API that lets you modify array size,但您不应该在这种情况下使用它。

【讨论】:

    【解决方案4】:

    如果您使用数组,则需要提取有效值并将它们放入数组的新实例中。你可以这样做:

    internal static T[] RemoveNullArrayElements<T>(T[] array)
        {
            if (array != null)
            {
                List<T> newLst = new List<T>();
                foreach (var ar in array)
                {
                    if (ar != null)
                    {
                        newLst.Add(ar);
                    }
                }
                return newLst.ToArray();
            }
    
            return array;
        }
    

    【讨论】:

      【解决方案5】:

      问题可能是您正在搜索空格而不是空字符串吗?

      试试下面:

      for(int i = 0; i < allToAddresses.Length; i++)
      {
         if(allToAddresses[i] == "") // find where empty element is
         { //Here i am trying to delete that empty element. does not work
            allToAddresses[i].Split("".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-07-20
        • 2021-07-24
        • 1970-01-01
        • 2020-02-12
        • 2022-08-11
        • 2011-04-08
        • 2023-03-09
        • 2019-10-02
        • 1970-01-01
        相关资源
        最近更新 更多