C# 当用户输入null或空字符串时引发错误
我正在尝试解决以下问题: 您需要创建一个名为C# 当用户输入null或空字符串时引发错误,c#,.net,string,exception-handling,C#,.net,String,Exception Handling,我正在尝试解决以下问题: 您需要创建一个名为Product的类来表示产品。 该类有一个名为Name的属性。产品类的用户 应该能够获取并设置Name属性的值。然而, 将Name的值设置为空字符串或null的任何尝试 值应引发异常。此外,产品类的用户 不能访问产品的任何其他数据成员 班级。您将如何创建这样一个类 我创建了以下代码,但由于某些原因,当字符串无效时,它不会引发异常: class Program { static void Main(string[] args) {
Product
的类来表示产品。
该类有一个名为Name
的属性。产品
类的用户
应该能够获取并设置Name
属性的值。然而,
将Name
的值设置为空字符串或null的任何尝试
值应引发异常。此外,产品
类的用户
不能访问产品的任何其他数据成员
班级。您将如何创建这样一个类
我创建了以下代码,但由于某些原因,当字符串无效时,它不会引发异常:
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");
}
}
}
}
是否因为我没有try-catch
语句而没有引发异常?
我还想知道有没有可能只有catch语句而没有try语句?如果状态错误,那么您的。让我们做一个真值表:
if (value != String.Empty || value != null)
你的if语句总是正确的
我要这样写:
if (value == String.Empty || value == null)
{
throw new ArgumentException("Name cannot be null or empty string", "Name");
}
else
{
name = value;
}
您可以将Or改为and,但我认为上面的内容更好(下面有一个不必要的双负):
正如Dmitry Bychenko所说,我没有注意到您没有测试值。不是您的属性的名称
异常中的第二个参数(Dmitry Bychenko再次指出)应该是:
导致当前异常的参数的名称
在您的例子中,哪个是字符串“value”
:
使用。更改您的设置
,如下所示:
set
{
if (!string.IsNullOrEmpty(value))
{
name = value;
}
else
{
throw new ArgumentException("Name cannot be null or empty string", "value");
}
}
您还可以使用它来指示指定的字符串是否为null、空或仅由空白字符组成。如果您希望对null和空字符串执行不同的异常(通常null表示完全错误,而空字符串只是格式错误):
如果您不想区分它们:
请注意,在这两种情况下,必须测试的都是值
,而不是属性名称
。在原始代码中,名称
(以及名称
)的初始值是null
,无论您尝试设置什么,都会得到异常。您正在检查以前的值(有效)。使用if
中的value
而不是Name
来验证新值。或者只需在Main
内设置Name
两次;)不试就抓不到。否则,它怎么知道应该从哪个代码捕获呢?即使没有try/catch,也会抛出异常。你只是没有达到代码。学习使用IDE的调试工具在代码执行时逐行遍历代码。我想这样你会很快发现问题。你在if语句中使用了或
。如果Name==null
,则Name!=String.Empty
则该部分通过。使用&&
。可能重复Yes,但从语法上看,切换语句会更好。如果字符串为空或null,则它是错误的。呃,您应该始终与!=首先为空。这只是一种“良好实践”,所以如果(x.Prop1==“test”&&x!=null)
这是一种值类型,您永远不会执行类似于的操作,但这与此处无关。这只适用于引用类型。@Liam:我很抱歉我的不礼貌,但不正确的比较实际上毁掉了所有的工作;现在没问题了,所以我给+1(旁注:请更新,ArgumentException
以及文本中的“value”和作为参数名的“value”)@Liam:它应该是“value”
而不是value
的值,而是一个字符串“value”。“set”提供的参数“value”会导致异常。这只是一个简单的练习,我相信我可以在同一个异常中检查null或空字符串,但这是您提出的一个有效点,我会记住这一点。谢谢
if (value != String.Empty && value != null)
{
name = value;
}
else
{
throw new ArgumentException("Name cannot be null or empty string", "value");
}
throw new ArgumentException("Name cannot be null or empty string", "value");
set
{
if (!string.IsNullOrEmpty(value))
{
name = value;
}
else
{
throw new ArgumentException("Name cannot be null or empty string", "value");
}
}
public string Name {
get {
return name;
}
set {
if (null == value)
throw new AgrumentNullException("value");
else if (String.Equals(value, ""))
throw new AgrumentException("Empty values are not allowed.", "value");
name = value;
}
}
public string Name {
get {
return name;
}
set {
if (String.IsNullOrEmpty(value))
throw new AgrumentException("Null or empty values are not allowed.", "value");
name = value;
}
}