如何`.Take()`对一个字符串并在结尾处获取一个字符串?

LINQ to Objects支持对字符串对象的查询,但是当我使用如下代码时:

string SomeText = "this is some text in a string"; return SomeText.Take(6).ToString(); 

我得到的只是:

 System.Linq.Enumerable+d__3a`1[System.Char] 

在这个问题中 ,这被视为“意外”,但这是我实际上要做的事情,我无法通过任何地方的搜索找到它。

我知道还有其他方法可以操作字符串,但后来我也知道你可以用LINQ做一些非常酷的技巧,我想知道是否有办法用LINQ修剪字符串到一定的长度?

System.Linq没有内置的方法来执行此操作,但您可以非常轻松地编写自己的扩展方法:

 public static class StringExtensions { public static string ToSystemString(this IEnumerable source) { return new string(source.ToArray()); } } 

不幸的是,因为object.ToString存在于所有.NET对象上,所以您必须为该方法指定一个不同的名称,以便编译器调用您的扩展方法,而不是内置的ToString

根据您在下面的评论,我们可以质疑这是否是正确的方法。 因为String通过其公共方法公开了许多function,所以我将此方法实现为String本身的扩展:

 ///  /// Truncates a string to a maximum length. ///  /// The string to truncate. /// The maximum length of the returned string. /// The input string, truncated to  characters. public static string Truncate(this string value, int length) { if (value == null) throw new ArgumentNullException("value"); return value.Length <= length ? value : value.Substring(0, length); } 

您可以按如下方式使用它:

 string SomeText = "this is some text in a string"; return SomeText.Truncate(6); 

这具有当字符串已经短于期望长度时不创建任何临时数组/对象的优点。

只需创建字符串

 string res = new string(SomeText.Take(6).ToArray()); 

还要注意字符串本机方法

 string res = SomeText.Substring(0, 6); 

我自己遇到过几次并使用以下内容:

 string.Join(string.Empty,yourString.Take(5)); 

SomeText.Take(6)将返回一个char的char的IEnumerable ,而ToString方法将不会返回您需要调用它的可疑字符串,如下所示:

 string [] array = SomeText.Take(6).ToArray(); string result = new string(array);