【问题标题】:Check if object property has an assigned value检查对象属性是否有赋值
【发布时间】:2015-07-20 11:22:22
【问题描述】:

我有一个类允许将某些属性留空(null)问题是我不知道如何正确检查并不断收到错误。

这是课程:

public class ZoomListItem
{
    public string image { get; set; }
    public string text1 { get; set; }
    public string text2 { get; set; }
    public ZoomAction action { get; set; }
}

这是我使用实例的方式:

@foreach (ZoomListItem item in Model.templates)
{
    var actionUrl = (item.action != null) ? "" : "#";  //error here

类的实例化没有赋值动作值,只有文本和图像被赋值。我在条件行中收到以下错误:

System.Web.Mvc.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

附加信息:值不能为空或为空

我是否没有正确检查 item.action != null

【问题讨论】:

  • 如果您尝试检查“item”是否为空???因为乍一看,您的代码似乎是正确的。
  • @Dryadwoods 如果 item 为 NULL,我们会得到一个 NRE 而不是上面提到的那个。但是,你确定,你在这一行得到了错误
  • ZoomAction 可能是struct 吗?
  • Value cannot be null or empty 但您将 actionUrl 设置为 "" - 一个空字符串。我假设您稍后在不允许使用空字符串的地方使用actionUrl,并且错误实际上并没有发生在您标记的行上(它不能在那里发生 - 如果你真的在使用自动属性,也就是说)。
  • @HimBromBeere:那是剃刀语法。 @ 基本上说这是代码,而不是我想出现在页面上的东西。

标签: c# asp.net oop


【解决方案1】:

您的代码应该检查item.action 是否为空,但不检查item 是否为空。在item为null的情况下,会出现空引用异常。你可能想要:

var actionURL = (item != null && item.action != null) ? "" : "#";

这将首先检查item 不为空,然后检查item.action 不为空。

@Luaan 的评论似乎包含了答案

【讨论】:

  • @Dryadwoods 好吧,如果这将是正确的答案,那么这种将其发布为答案的方法绝对可以,因为您没有。然而正如威廉已经提到的,如果item 为空,我们会得到一个 NRE,所以这不是正确的答案。
猜你喜欢
  • 2017-12-11
  • 1970-01-01
  • 2012-02-02
  • 2013-10-20
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2013-12-26
  • 2014-05-08
相关资源
最近更新 更多