当用户输入null或空字符串时抛出错误

Paw*_*wel 9 .net c# string exception-handling

我正在尝试解决以下练习:

您需要创建一个Product代表产品的类.该类有一个名为的属性Name.Product该类的用户应该能够获取和设置Name属性的值.但是,任何将值设置为Name空字符串或空值的尝试都应引发异常.此外,Product该类的用户不应该能够访问Product 该类的任何其他数据成员.你将如何创建这样一个类?

我创建了以下代码但由于某种原因它不会在字符串无效时抛出异常:

class Program
{
    static void Main(string[] args)
    {
        Product newProduct = new Product();
        Console.WriteLine("Enter Product name:");
        newProduct.Name = null; //Console.ReadLine();
        Console.WriteLine("Product name is : {0}", newProduct.Name);
        Console.ReadLine();
    }
}

class Product
{
    private string name;
    public string Name
    {
        get
        {
            return this.name;
        }
        set
        {
            if (Name != String.Empty || Name != null)
            {
                name = value;
            }
            else
            {
                throw new ArgumentException("Name cannot be null or empty string", "Name");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是不是因为我没有try-catch声明而抛出异常?我也想知道是否有可能只有没有try语句的catch语句?

Sal*_*ari 12

使用String.IsNullOrEmpty Method (String).改变你的set喜好:

set
{
      if (!string.IsNullOrEmpty(value))
      {
            name = value;
      }
      else
      {
            throw new ArgumentException("Name cannot be null or empty string", "value");
      }
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用String.IsNullOrWhiteSpace Method (String)它指示指定的字符串是空,空还是仅由空格字符组成.


Lia*_*iam 7

你的if国家错了.我们来做一个真值表:

if (value != String.Empty || value != null)
Run Code Online (Sandbox Code Playgroud)
Name = null   True Or False  = True 
Name = "name" True Or True = True
Name = ""     False Or True = True 
Run Code Online (Sandbox Code Playgroud)

你的if语句总是正确的!

我会重写它:

if (value == String.Empty || value == null)
{
     throw new ArgumentException("Name cannot be null or empty string", "Name");  
}
else
{
     name = value;
}
Run Code Online (Sandbox Code Playgroud)

你可以改变Or to和AND但我认为上面的读数更好(下面有一个不必要的双重否定):

if (value != String.Empty && value != null)
{
   name = value;
}
else
{
    throw new ArgumentException("Name cannot be null or empty string", "value");
}
Run Code Online (Sandbox Code Playgroud)

正如Dmitry Bychenko所说,我没有注意到你没有进行测试value.在吸气剂中,您应该使用该value属性.不是您的财产的名称


您的例外中的第二个参数(由Dmitry Bychenko再次指出)应为:

导致当前异常的参数的名称.

MSDN

在你的情况下是字符串"value":

throw new ArgumentException("Name cannot be null or empty string", "value");
Run Code Online (Sandbox Code Playgroud)

  • @Liam:我对我的不礼貌感到非常抱歉,但不正确的比较实际上破坏了所有的工作; 现在没关系,所以+1来自我(旁注:更新,请,'ArgumentException`以及:"值"在文本中,"value"作为参数名称) (2认同)