如何在数组中删除空元素?

3

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

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);
    }
}

如果您始终得到一个空字符串的最终条目,您应该尝试找出原因,而不是修复数组。这是假设它是您的代码或您有一些控制权的代码(团队成员的)。 - BryanT
5个回答

7

你可以尝试使用 Linq 来实现这个功能。

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

您还需要在命名空间中包含以下内容:

using System.Linq;

您可以使用 Where 方法来过滤初始数组。在此方法中,您需要传递一个谓词,如果当前地址的 string.IsNullOrWhiteSpace 方法返回 false,则返回 true。否则返回 false。使用此筛选器,您可以丢弃为 null、空或仅由空格字符组成的地址。


3
".Where(!string.IsNullOrWhitespace)" 无法编译。 - haim770
@haim 我错了 :( 感谢你发现我的错别字。 - Christos
!string.IsNullOrWhiteSpace 也无法编译。错误为:“CS0023 运算符 '!' 不能应用于类型为 'method group' 的操作数”。 - adv12

4
test =  test.Where(x => !string.IsNullOrWhitepace(x)).ToArray();

他可能需要使用 string.IsNullOrWhitepace(x) 函数,因为他的问题包含了 " ",它不是空字符串,而是一个空白字符。 - Quantic
由于它包含空格,string.IsNullOrEmpty(" ");不起作用。 - Gilgamesh
是的,抱歉我忽略了那个,是的,在这种情况下它必须是一个NullOrWhitespace。我会编辑答案。对造成的任何困惑感到抱歉。 - Murray Hart

2
您无法真正地从数组中“删除”元素,因为数组的大小是固定的*。不过,您可以构建一个新数组,跳过所有空元素:
allToAddresses = allToAddresses.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();

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

* 为了充分披露,.NET 确实有 一个 API,可以让您修改数组大小,但在这种情况下不应使用它。


1
如果您正在使用数组,您需要将有效值提取出来并放入一个新的数组实例中。您可以这样做:
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;
    }

0

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

尝试以下操作:

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);
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接