21

私は次のことを試しました:

var Title = LongTitle.Substring(0,20)

これは機能しますが、LongTitle の長さが 20 未満の場合は機能しません。文字列を最大 20 文字に制限し、たとえば 5 文字の長さの場合にエラーが発生しないようにするにはどうすればよいですか?

4

5 に答える 5

37

長さが超えないことを確認してくださいLongTitlenullチェックはスキップされました):

int maxLength = Math.Min(LongTitle.Length, 20);
string title = LongTitle.Substring(0, maxLength);

これは拡張メソッドに変換できます。

public static class StringExtensions
{

    /// <summary>
    /// Truncates string so that it is no longer than the specified number of characters.
    /// </summary>
    /// <param name="str">String to truncate.</param>
    /// <param name="length">Maximum string length.</param>
    /// <returns>Original string or a truncated one if the original was too long.</returns>
    public static string Truncate(this string str, int length)
    {
        if(length < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(length), "Length must be >= 0");
        }

        if (str == null)
        {
            return null;
        }

        int maxLength = Math.Min(str.Length, length);
        return str.Substring(0, maxLength);
    }
}

次のように使用できます。

string title = LongTitle.Truncate(20);
于 2013-06-22T10:18:55.897 に答える
17

最短、:

var title = longTitle.Substring(0, Math.Min(20, longTitle.Length))
于 2013-06-22T10:30:07.433 に答える
9
string title = new string(LongTitle.Take(20).ToArray());
于 2013-06-22T10:20:30.120 に答える
5

文字列の長さが 20 より大きい場合は 20 を使用し、それ以外の場合は長さを使用します。

string  title = LongTitle.Substring(0,
    (LongTitle.Length > 20 ? 20 : LongTitle.Length));
于 2013-06-22T10:22:24.763 に答える
3

StringLength 属性を使用できます。そうすれば、指定された長さよりも長い (または短い) 文字列を格納することはできません。

参照: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute%28v=vs.100%29.aspx

[StringLength(20, ErrorMessage = "Your Message")]
public string LongTitle;
于 2013-06-22T10:35:38.880 に答える