c#在.net 2.0中使用string.join时删除空null

时间:2015-05-13 06:50:12

标签: c# asp.net .net

我知道在使用string.join时我们可以使用下面的方法删除null或空数组:

var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));

我在.Net 2.0中尝试了这个但不能。很抱歉要申报,但我必须使用.net 2.0作为我的申请。 对于.net 2.0有什么办法吗?

5 个答案:

答案 0 :(得分:7)

这是一个可能的解决方案:

var nonNullItems = new List<string>();
foreach(var item in array) {
    if(!string.IsNullOrEmpty(item))
        nonNullItems.Add(item);
}
var res = string.Join(",",nonNullItems.ToArray());

答案 1 :(得分:2)

你可以使用像join / split / join这样丑陋的黑客:

string res = string.Join(",", 
             (string.Join(",", array).split(",", 
              StringSplitOptions.RemoveEmptyEntries));

答案 2 :(得分:1)

遍历你的阵列:

var tmp = new List<string>();

foreach(var s in array) 
{
    if (!string.IsNullNorEmpty(s)) tmp.Add(s);
}

var res = string.Join(",", tmp.ToArray());

答案 3 :(得分:0)

如果您想(在某种程度上)自己滚动并在项目中的多个位置需要它,您可以推出自己的“LINQ扩展”(显然不是扩展方法,因为您的目标是.NET 2.0),但是......

重要提示:

  • 与LINQ Where()不同,这会贪婪地评估给定的集合,因此如果给定的IEnumerable没有结束,则会导致无限循环。

静态方法:

public static class EnumerableExtensions {
    public delegate TResult Func<T, TResult>(T t);

    public static T[] Where<T>(IEnumerable<T> e, Func<T, bool> func) {
        IList<T> result = new List<T>();
        foreach (T each in e) {
            if (func(each)) {
                result.Add(each);
            }
        }
        T[] returnValue = new T[result.Count];
        result.CopyTo(returnValue, 0);
        return returnValue;
    }
}

并使用:

string[] array = {"a", "b"};
string res = string.Join(
    ",", 
    EnumerableExtensions.Where(array, delegate(string s) { return !string.IsNullOrEmpty(s); })
);

答案 4 :(得分:0)

这有效,但我对性能不确定。

string res = string.Join(",", Array.FindAll(array, delegate(string s) 
{ 
    return !string.IsNullOrEmpty(s); 
} ));