我知道在使用string.join时我们可以使用下面的方法删除null或空数组:
var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));
我在.Net 2.0中尝试了这个但不能。很抱歉要申报,但我必须使用.net 2.0作为我的申请。 对于.net 2.0有什么办法吗?
答案 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),但是......
重要提示:
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);
} ));