我想为String类编写一个扩展方法,以便如果输入字符串比提供的长度N长,则只显示前N个字符。

这是它的样子:

public static string TruncateLongString(this string str, int maxLength)
{
    if (str.Length <= maxLength)
        return str;
    else
        //return the first maxLength characters                
}

什么字符串.*()方法我可以使用只得到str的前N个字符?


当前回答

我在我的项目中添加了这个,只是因为我使用它的地方是一个很高的机会,它被循环使用,在一个在线托管的项目中,因此我不希望任何崩溃,如果我能管理它。长度符合我的一列。这是C # 7

只有一句话:

 public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";

其他回答

string truncatedToNLength = new string(s.Take(n).ToArray());  

这个解决方案有一个小小的好处,如果n大于s。length,它仍然做正确的事情。

你可以使用LINQ str.Take(n)或str.SubString(0, n),后者将为n > str.Length抛出ArgumentOutOfRangeException异常。

注意,LINQ版本返回一个IEnumerable<char>,所以你必须将IEnumerable<char>转换为string: new string(s.t take (n). toarray())。

每当我必须在c#中进行字符串操作时,我就会想念Visual Basic中的Left和Right函数,它们比Substring使用起来简单得多。

所以在我的大多数c#项目中,我为它们创建了扩展方法:

public static class StringExtensions
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }

    public static string Right(this string str, int length)
    {
        return str.Substring(str.Length - Math.Min(length, str.Length));
    }
}

注意: 的数学。Min部分的存在是因为当输入字符串的长度小于所请求的长度时,Substring会抛出一个argumentoutofranceexception,正如在前面的回答下的一些评论中已经提到的那样。

用法:

string longString = "Long String";

// returns "Long";
string left1 = longString.Left(4);

// returns "Long String";
string left2 = longString.Left(100);
substring(int startpos, int lenght);
string text = "1234567";
var x = text.Substring(0, text.Length>5?6:text.Length);