c#在.net 2.0中使用string.join时删除空null
我知道,在使用string.join时,我们可以使用以下方法删除null或空数组:c#在.net 2.0中使用string.join时删除空null,c#,asp.net,.net,C#,Asp.net,.net,我知道,在使用string.join时,我们可以使用以下方法删除null或空数组: var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s))); 我在.NET2.0中尝试过这个,但不能。很抱歉声明,我的应用程序必须使用.net 2.0。 .net 2.0有什么办法吗?这里有一个可能的解决方案: var nonNullItems = new List<string>(); foreach(var
var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));
我在.NET2.0中尝试过这个,但不能。很抱歉声明,我的应用程序必须使用.net 2.0。
.net 2.0有什么办法吗?这里有一个可能的解决方案:
var nonNullItems = new List<string>();
foreach(var item in array) {
if(!string.IsNullOrEmpty(item))
nonNullItems.Add(item);
}
var res = string.Join(",",nonNullItems.ToArray());
var nonNullItems=new List();
foreach(数组中的变量项){
如果(!string.IsNullOrEmpty(项))
非空项。添加(项);
}
var res=string.Join(“,”,nonNullItems.ToArray());
你可以使用像join/split/join这样难看的黑客:
string res = string.Join(",",
(string.Join(",", array).split(",",
StringSplitOptions.RemoveEmptyEntries));
在阵列中循环:
var tmp = new List<string>();
foreach(var s in array)
{
if (!string.IsNullNorEmpty(s)) tmp.Add(s);
}
var res = string.Join(",", tmp.ToArray());
var tmp=newlist();
foreach(数组中的变量s)
{
如果(!string.IsNullNorEmpty(s))tmp.Add(s);
}
var res=string.Join(“,”,tmp.ToArray());
如果您想(某种程度上)推出自己的,并且需要在项目中的多个位置使用它,您可以推出自己的“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 res = string.Join(",", Array.FindAll(array, delegate(string s)
{
return !string.IsNullOrEmpty(s);
} ));
您可以轻松地重新编写代码以执行您想要的操作。NET 2.0不支持LINQ表达式。代码基本上是在数组中查找当前项不为null或空的项,然后最终将数组连接在一起。为什么不删除数组中的null对象并在没有LINQ的情况下将它们连接在一起?
ToArray
?是的,ToArray()
一直在那里。。。。的确如此。继续。List
有自己的ToArray()
:但是,您可能必须将var
替换为string
,因为关键字是在C#3.0中添加的。但是我相信当前版本的VisualStudio可以正确编译,即使是针对2.0框架,var
关键字是一种编译器功能,而不是.NET功能。只要您使用足够现代化的编译器/Visual Studio,它将适用于您使用的任何框架版本。@Konamiman谢谢,我不知道。编辑我的答案以删除该注释。据我所知,输入和输出类型(方差和协方差)在.NET 2.0上是不可能的,也没有启用LAMBDA语法。@HimBromBeere我写这篇文章时是针对2.0的。事实上,它对C#3.0以上版本有效,但不一定适用于.NET 2。0@HimBromBeere我们走吧在C#中,在以下场景中支持方差:---代理中的协方差和逆变,也称为“方法组方差”(自C#2.0起)“-您在语法问题上是正确的,但是我使用ISO-2规范进行了尝试,id没有编译。但是,您的链接还声明了以下内容:接口和委托中泛型类型参数的差异(自C#4.0以来)
。无论如何,你相应地更新了你的答案。
string res = string.Join(",", Array.FindAll(array, delegate(string s)
{
return !string.IsNullOrEmpty(s);
} ));