如何强制实施字符串中允许的最大和最小字符数

本文关键字:字符 何强制 字符串 | 更新日期: 2023-09-27 18:30:57

我想限制我的字符串,以便您必须输入最少 3 个字符,最多输入 10 个字符。在下面的代码中这可能吗?

主.cs:

class Program
{   
    static void Main(string[] args)
    {
        Something hello = new Something();
        string myname;
        Something test = new Something();
        myname = Console.ReadLine();
        test.Name = myname;
    }
}

具有属性的类:

class Okay : IYes
{
    private string thename;
    public string Name
    {
        get {return thename;}
        set {thename = value;} //what to put here???
    }
}

如何强制实施字符串中允许的最大和最小字符数

setter可能不是最好的检查位置。 您应该在输入点进行检查:

  string myname = "";
  while (myname.Length<3 || myname.Length >10)
  {
    Console.WriteLine("Please enter your name (between 3 and 10 characters");
    myname = Console.ReadLine();
  }
  test.Name = myname;

显然,您可以采取一些步骤来使其更加用户友好:也许在第一次失败后会有不同的消息,某种脱离循环的方法等。

试试这个:-

public string Naam
        {
            get { return thename; }
            set
            {
                if (value.Length >= 3 && value.Length <= 10)
                    thename = value;
                else
                    throw new ArgumentOutOfRangeException();
            } 
        }
class Okay : IYes
{
    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (value == null) throw new ArgumentNullException("Name");
            if (value.Length < 3 || value.Length > 10) 
                throw new ArgumentOutOfRangeException("Name");
            name = value;
        }
    }
}

如果字符串太长,您还可以截断字符串,而不是仅通过获取(最多)前 10 个字符来引发异常:

class Okay : IYes
{
    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (value == null) throw new ArgumentNullException("Name");
            if (value.Length < 3) throw new ArgumentOutOfRangeException("Name");
            name = string.Join("", value.Take(10));
        }
    }
}
private static void GenericTester()
{
    Okay ok = new Okay {Name = "thisIsLongerThan10Characters"};
    Console.WriteLine(ok.Name);
}
// Output:
// thisIsLong