我能理解string.Join()
var stringies1 =new [] {"Blood", "is", "Thicker", "Than", "Water" };
var zoin = string.Join("|", stringies1);
它与扩展方法Join()有什么不同?
I mean stringies1.Join(IEnumerable<T Result......)
答案 0 :(得分:3)
我假设通过扩展方法,您指的是Enumerable.Join
方法? string.Join
IEnumerable.Join是两种截然不同的方法:
string.Join
将获取一个字符串数组,使用一些分隔符将它们连接在一起,然后返回结果字符串。Enumerable.Join
将以与SQL中的JOIN操作相同的方式对两个集合执行操作答案 1 :(得分:1)
您所指的扩展方法,Enumerable.Join用于加入集合,这意味着您将它们并排放置并尝试将项目与项目匹配,从而产生结果。可以想象它就像将电话簿与您的聚会名称列表相匹配,找到列表中所有名称的电话号码。
所以,不,扩展方法Join不能用于将它们放在一个数组之后,并将它们组合成一个长数组。
但是,有一种替代方法,您可以在同一个类中使用扩展方法Enumerable.Concat。
此方法不对数组进行操作,而是对所有实现IEnumerable<T>
的集合类型进行操作,因此也会生成另一个IEnumerable<T>
作为结果。然后,您可以使用Enumerable.ToArray将结果转换为数组。
因此,您将使用以下代码:
var stringies1 = new [] {"Blood", "is", "Thicker", "Than", "Water" };
var stringies2 = new [] { "and", "so", "is", "wine" };
var stringies3 = stringies1.Concat(stringies2).ToArray();
// stringies3 now contains "Blood", "is", ... and "and", "so", "is", ...
这假设您使用的是.NET 3.5,并在文件顶部的使用列表中包含以下内容:
using System.Linq;
另一方面,如果您(或其他人发现此答案)未使用.NET 3.5,则需要一些手动代码。这是一个简单的通用方法(假设.NET 2.0),可以帮助您:
public static T[] Concat<T>(T[] firstSource, T[] secondSource,
params T[] restOfSources)
{
// omitted validation of non-null arguments, etc.
Int32 totalLength = firstSource.Length + secondSource.Length;
foreach (T[] source in restOfSources)
totalLength += source.Length;
T[] result = new T[totalLength];
Int32 currentIndex = 0;
Array.Copy(firstSource, 0, result, currentIndex, firstSource.Length);
currentIndex += firstSource.Length;
Array.Copy(secondSource, 0, result, currentIndex, secondSource.Length);
currentIndex += secondSource.Length;
foreach (T[] source in restOfSources)
{
Array.Copy(source, 0, result, currentIndex, source.Length);
currentIndex += source.Length;
}
return result;
}
可以这样使用:
var stringies1 = ...
var stringies2 = ...
var stringies3 = YourClass.Concat(stringies1, stringies2);
答案 2 :(得分:-1)
相同功能的可读性方法不同,适当时代码较少。