我只是想知道如何限制C#中字符串的长度。
string foo = "1234567890";
说我们有。我如何限制foo说5个字符?
答案 0 :(得分:65)
C#中的字符串是不可变的,在某种意义上说它意味着它们是固定大小的 但是,您不能约束字符串变量只接受n个字符的字符串。如果定义字符串变量,则可以为其指定任何字符串。如果截断字符串(或抛出错误)是业务逻辑的重要组成部分,请考虑在特定类的属性设置器中执行此操作(这是Jon建议的,这是在.NET中创建值的最自然的方法)。 p>
如果您只是想确保不会太长(例如,将其作为参数传递给某些遗留代码时),请手动截断它:
const int MaxLength = 5;
var name = "Christopher";
if (name.Length > MaxLength)
name = name.Substring(0, MaxLength); // name = "Chris"
答案 1 :(得分:34)
您可以扩展“string”类,以便返回有限的字符串。
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// since specified strings are treated on the fly as string objects...
string limit5 = "The quick brown fox jumped over the lazy dog.".LimitLength(5);
string limit10 = "The quick brown fox jumped over the lazy dog.".LimitLength(10);
// this line should return us the entire contents of the test string
string limit100 = "The quick brown fox jumped over the lazy dog.".LimitLength(100);
Console.WriteLine("limit5 - {0}", limit5);
Console.WriteLine("limit10 - {0}", limit10);
Console.WriteLine("limit100 - {0}", limit100);
Console.ReadLine();
}
}
public static class StringExtensions
{
/// <summary>
/// Method that limits the length of text to a defined length.
/// </summary>
/// <param name="source">The source text.</param>
/// <param name="maxLength">The maximum limit of the string to return.</param>
public static string LimitLength(this string source, int maxLength)
{
if (source.Length <= maxLength)
{
return source;
}
return source.Substring(0, maxLength);
}
}
}
结果:
limit5 - q
limit10 - The 快速
limit100 - 快速棕色 狐狸跳过懒狗。
答案 2 :(得分:16)
你做不到。请注意foo
是string
类型的变量。
您可以创建自己的类型,例如BoundedString
,然后:
BoundedString foo = new BoundedString(5);
foo.Text = "hello"; // Fine
foo.Text = "naughty"; // Throw an exception or perhaps truncate the string
...但是你不能阻止字符串变量被设置为任何字符串引用(或null)。
当然,如果你有一个字符串属性,你可以这样做:
private string foo;
public string Foo
{
get { return foo; }
set
{
if (value.Length > 5)
{
throw new ArgumentException("value");
}
foo = value;
}
}
在你更大的背景下,这对你有帮助吗?
答案 3 :(得分:6)
如果这是在类属性中,您可以在setter中执行:
public class FooClass
{
private string foo;
public string Foo
{
get { return foo; }
set
{
if(!string.IsNullOrEmpty(value) && value.Length>5)
{
foo=value.Substring(0,5);
}
else
foo=value;
}
}
}
答案 4 :(得分:5)
string shortFoo = foo.Length > 5 ? foo.Substring(0, 5) : foo;
请注意,您不能仅使用foo.Substring(0,5),因为当foo小于5个字符时会抛出错误。
答案 5 :(得分:3)
以下是此问题的另一个替代答案。这种扩展方法非常有效。这解决了字符串短于最大长度以及最大长度为负的问题。
public static string Left( this string str, int length ) {
if (str == null)
return str;
return str.Substring(0, Math.Min(Math.Abs(length), str.Length));
}
另一种解决方案是将长度限制为非负值,并将负值除以零。
public static string Left( this string str, int length ) {
if (str == null)
return str;
return str.Substring(0, Math.Min(Math.Max(0,length), str.Length));
}
答案 6 :(得分:2)
我能看到这个目的的唯一原因是数据库存储。如果是这样,为什么不让DB处理它然后将异常推送到表示层处理?
答案 7 :(得分:2)
您可以尝试这样:
var x= str== null
? string.Empty
: str.Substring(0, Math.Min(5, str.Length));
答案 8 :(得分:1)
如果您将if语句填充到要限制它的长度,则可以避免使用if语句。
string name1 = "Christopher";
string name2 = "Jay";
int maxLength = 5;
name1 = name1.PadRight(maxLength).Substring(0, maxLength);
name2 = name2.PadRight(maxLength).Substring(0, maxLength);
name1将有Chris
name2将有Jay
如果在使用substring
之前需要检查长度,则为no答案 9 :(得分:0)
使用删除() ...
string foo = "1234567890";
int trimLength = 5;
if (foo.Length > trimLength) foo = foo.Remove(trimLength);
// foo is now "12345"
答案 10 :(得分:-1)
foo = foo.Substring(0,5);