Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#在.net 2.0中使用string.join时删除空null_C#_Asp.net_.net - Fatal编程技术网

c#在.net 2.0中使用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

我知道,在使用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 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); 
} ));