如何将字符串长度限制为150个字符?

18

我尝试了以下方法:

var a = description.Substring(0, 150);

然而,如果描述的长度小于150个字符,则会出现问题。那么,有没有另一种方法可以限制长度为150个字符,并且在字符串长度为20时不会出错。

10个回答

36
var a = description == null 
        ? string.Empty 
        : description.Substring(0, Math.Min(150, description.Length));

23
var a = description.Substring(0, Math.Min(150, description.Length));

只需获取150个字符或整个字符串中较短的部分。


12

尝试使用以下扩展方法:

public static string LimitTo(this string data, int length) {
  return (data == null || data.Length < length) 
    ? data 
    : data.Substring(0, length);
}

7

字符串长度属性适用于C#:

[StringLength(150)]
public string MyProperty { get; set; }

2
我已经在WPF的ViewModel中进行了测试,但它与TextBox不兼容。文档提到了ASP.NET。也许它只用于那种类型的应用程序。 - SuperJMN

4

如果您的环境支持以下方法,那将是很好的。(如@christian-cody所建议的。)

[StringLength(150)]
public string MyProperty { get; set; }

你需要包含以下命名空间才能使用它。

using System.ComponentModel.DataAnnotations;

3
我认为你实际上想要这个。
public static string LimitTo(this string data, int length) {
  return (data == null || data.Length <= length)   // Less than or equal to
    ? data 
    : data.Substring(0, length);
}

1

字符串是不可变的,即使您可以创建一个按照您想要的方式工作的实例,一旦您将另一个值分配给变量,它将成为类型 string 的另一个实例。

如果您想要一个最大长度为150个字符的string属性,请编写一个属性,在setter中检查该值,并在超过150个字符时引发异常。

如果您想要一个最大长度为150个字符的string参数到方法中,请在方法顶部检查是否超过150个字符,如果是,则抛出异常。


1
var a = description.Substring(0, description.Length > 150 ? 150 : description.Length);

1

似乎每个人都在过度复杂化这个问题,你只需要简单地

var a = description;
if (description.length > 150) a = description.Substring(0, 150);

有时候你需要绕过问题去思考。

0

从C# 8.0开始,我们可以利用范围运算符,最终得到以下结果:

var x = description[..150];

只有当字符串的长度大于等于150个字符时,这个方法才有效。如果字符串的长度小于150个字符,将会抛出ArgumentOutOfRange异常。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接