C# 如何强制执行字符串中允许的最大和最小字符数

C# 如何强制执行字符串中允许的最大和最小字符数,c#,string,properties,C#,String,Properties,我想限制我的字符串,这样你就必须输入最少3个字符,最多10个字符。在下面的代码中是否可能出现这种情况 main.cs: class Program { static void Main(string[] args) { Something hello = new Something(); string myname; Something test = new Something(); myname = Con

我想限制我的字符串,这样你就必须输入最少3个字符,最多10个字符。在下面的代码中是否可能出现这种情况

main.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;
string myname=”“;
while(myname.Length10)
{
Console.WriteLine(“请输入您的姓名(3到10个字符之间”);
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();
            } 
        }
公共字符串Naam
{
获取{返回名称;}
设置
{
如果(value.Length>=3&&value.Length
类正确:IYes
{
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置
{
如果(value==null)抛出新的ArgumentNullException(“名称”);
如果(value.Length<3 | | value.Length>10)
抛出新ArgumentOutOfRangeException(“名称”);
名称=值;
}
}
}
如果字符串太长,也可以截断该字符串,而不是仅使用(最多)前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
class好的:IYes
{
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置
{
如果(value==null)抛出新的ArgumentNullException(“名称”);
如果(value.Length<3)抛出新ArgumentOutOfRangeException(“名称”);
name=string.Join(“,value.Take(10));
}
}
}
私有静态void GenericTester()
{
Okay ok=new Okay{Name=“thisislongerthan 10characters”};
Console.WriteLine(ok.Name);
}
//输出:
//这很长

定义“限制”。您可以在输入后再次询问;但控制台应用程序中没有UI验证。BradleyDotNet是正确的,没有默认验证。有一些设计模式使验证易于添加,但我猜这个家庭作业和设计模式在这一点上可能太混乱了。谢谢,这很有帮助,我定义了一个限制现在。添加了空检查。请注意,这意味着一旦设置了名称,就无法“清除”它!
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