Mik*_*oud 6 .net c# linq string
此问题仅用于学术目的.
我们假设我有以下代码......
var split = line.Split(new[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
var elem = new XElement("shop");
elem.SetAttributeValue("name", split.Take(split.Length - 1)); <=====
elem.SetAttributeValue("tin", split.Last());
Run Code Online (Sandbox Code Playgroud)
我希望带箭头的线能产生与此相同的结果......
string.Join(string.Empty, split.Take(split.Length - 1));
Run Code Online (Sandbox Code Playgroud)
......没有使用string.Join.
那可能吗?我似乎无法找到LINQ语句来做...希望你们都已经知道了!
使用StringBuilderfor O(n)性能:
split
.Take(split.Length - 1)
.Aggregate(new StringBuilder(), (sb, s) => sb.Append(s)).ToString();
Run Code Online (Sandbox Code Playgroud)
如果对象是为了避免组合LINQ调用和静态方法的树的尴尬,那么一个简单的解决方案是扩展方法:
public static string Join(this IEnumerable<string> self, string separator = "")
{
return string.Join(separator, self);
}
Run Code Online (Sandbox Code Playgroud)
然后:
split.Take(split.Length - 1).Join();
Run Code Online (Sandbox Code Playgroud)
我觉得这比string.Join在复杂的表达式中使用要好得多.
两者都不要使用Split,只需找到最后一个逗号并使用它Substring来分隔字符串:
int pos = line.LastIndexOf(',');
var elem = new XElement("shop");
elem.SetAttributeValue("name", line.Substring(0, pos).Replace(",", String.Empty));
elem.SetAttributeValue("tin", line.Substring(pos + 1));
Run Code Online (Sandbox Code Playgroud)