aba*_*hev 7 c# linq ienumerable extension-methods
class String包含非常有用的方法 - String.Join(string, string[]).
它从数组创建一个字符串,用给定的符号分隔数组的每个元素.但一般 - 它不会在最后一个元素后添加分隔符!我将它用于ASP.NET编码,用<br />"或"分隔Environment.NewLine.
所以我想在每行之后添加一个空行asp:Table.我IEnumerable<TableRow>可以使用哪种方法来实现相同的功能?
我写了一个扩展方法:
public static IEnumerable<T>
Join<T>(this IEnumerable<T> src, Func<T> separatorFactory)
{
var srcArr = src.ToArray();
for (int i = 0; i < srcArr.Length; i++)
{
yield return srcArr[i];
if(i<srcArr.Length-1)
{
yield return separatorFactory();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式使用它:
tableRowList.Join(()=>new TableRow())
Run Code Online (Sandbox Code Playgroud)
LINQ的当量String.Join是Aggregate
例如:
IEnumerable<string> strings;
string joinedString = strings.Aggregate((total,next) => total + ", " + next);
Run Code Online (Sandbox Code Playgroud)
如果给出TableRows的IE,则代码将类似.
在.NET 3.5中,您可以使用此扩展方法:
public static string Join<TItem>(this IEnumerable<TItem> enumerable, string separator)
{
return string.Join(separator, enumerable.Select(x => x.ToString()).ToArray());
}
Run Code Online (Sandbox Code Playgroud)
或者在.NET 4中
public static string Join<TItem>(this IEnumerable<TItem> enumerable, string separator)
{
return string.Join(separator, enumerable);
}
Run Code Online (Sandbox Code Playgroud)
但问题是在每个元素之后需要一个分隔符,包括这个(3.5版本)可用的最后一个元素: -
public static string AddDelimiterAfter<TItem>(this IEnumerable<TItem> enumerable, string delimiter)
{
return string.Join("", enumerable.Select(x => x.ToString() + separator).ToArray());
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用.Aggregate在没有扩展方法的情况下执行此操作.
| 归档时间: |
|
| 查看次数: |
4383 次 |
| 最近记录: |