我想为String
类编写一个扩展方法,以便如果输入字符串to比提供的长度N
长,则只显示前N
字符。
它看起来是这样的:
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
我可以使用什么String.*()
方法来仅获取str
的前几个N
字符
发布于 2010-08-25 22:23:54
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str)) return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
在C# 8或更高版本中,也可以使用Range使其更简洁:
public static string TruncateLongString(this string str, int maxLength)
{
return str?[0..Math.Min(str.Length, maxLength)];
}
可以使用表达式体进一步减少:
public static string TruncateLongString(this string str, int maxLength) =>
str?[0..Math.Min(str.Length, maxLength)];
注null -条件运算符(?
)用于处理str
为null的情况。这取代了显式null检查的需要。
发布于 2010-08-25 22:25:01
string truncatedToNLength = new string(s.Take(n).ToArray());
这个解决方案有一个很小的好处,就是如果n大于s.Length,它仍然会做正确的事情。
发布于 2010-08-25 22:24:38
您可以使用LINQ str.Take(n)
或str.SubString(0, n)
,后者将为n > str.Length
抛出ArgumentOutOfRangeException
异常。
请注意,LINQ版本返回一个IEnumerable<char>
,因此您必须将IEnumerable<char>
转换为string
:new string(s.Take(n).ToArray())
。
https://stackoverflow.com/questions/3566830
复制相似问题