【问题标题】:Compare value member when setting property设置属性时比较值成员
【发布时间】:2013-07-27 15:27:00
【问题描述】:

我在 C# 中有一个自定义类的属性,我已经覆盖了它的 setter。我想在 setter 中比较自定义类的属性,如下所示:

public DatabaseInfo CurrentDatabaseManagedSelection 
{
   get { return CurrentDatabaseManaged; }
   set {
         if (String.Equals(value.Name,  CurrentDatabaseManaged.Name,StringComparison.OrdinalIgnoreCase))    
              return;  
         CurrentDatabaseManaged = DatabaseManagement.ReadDatabase(value.FileName);
       }
}

在 DatabaseInfo 类中,有一个名为 Name 的标准 String 属性。

但是,当我运行程序时,出现以下异常。谁能告诉我为什么会发生这种情况以及如何解决这个问题?

调用的目标已抛出异常。

编辑:我确实在视图模型的构造函数中设置了上面设置器所针对的属性的值。我只需将 CurrentDatabaseManagedSelection 设置为 DatabaseInfo 类的对象即可。

【问题讨论】:

  • 我们——至少是我——可能需要更多信息。以下将在基本类结构中毫无问题地工作set { if (string.Equals(value, Name)) return; _name = value;}。是否可以对属性给出完整的定义,以便我们可以看到它是如何定义的?另外你如何在构造函数中设置它?
  • @MechnicalObject 好的,我会更新问题以在一分钟内添加更多信息 :)
  • @Andy 告诉我内部异常。它必须与空引用相关
  • @EhsanUllah 是的,确实如此。请看我的回答。感谢您的帮助:)
  • @Andy 但我想知道为什么 == 没有解决您的问题

标签: c# wpf properties comparison


【解决方案1】:

我想我可能已经找到了问题... 好吧,我已经解决了!

问题是CurrentDatabaseManaged 尚未初始化,因此在我尝试设置上述属性时等于null。我通过在 setter 方法中添加 try.. catch 发现了这一点,并为 CurrentDatabaseManaged.Name 创建了一个新字符串 - 堆栈跟踪指向该行。

希望以后能对其他人有所帮助。

【讨论】:

  • 很高兴听到您发现了问题。您可能还想在ReadDatabase(value.FileName); 方法中添加一个保护关闭如果尚未完成,以确定您的方法在您传递空字符串或空字符串时将如何反应。
  • @MechanicalObject 是的,我已经这样做了,但感谢您的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 2021-12-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多