【问题标题】:wp7 - application.current as app Value can not be nullwp7 - application.current as app 值不能为空
【发布时间】:2011-02-15 21:22:18
【问题描述】:

我在 App.xaml.cs 文件中放置了一些属性,当我浏览我的应用程序时,我用它来存储数据和填充文本框:

    public String appRXName { set; get; }
    public String appRXNumber { set; get; }

最初我有一个枢轴控件,它调用不同的页面来收集数据,但后来我将该枢轴控件项移到它自己的页面上,该页面仍然调用其他页面来收集数据。现在,当我运行应用程序时出现错误。

当我将它放在原始 Pivot 控件中时,它基本上可以正常工作。一旦我将它移动到一个单独的页面(数据透视页面调用它)然后我开始得到这个错误:

System.ArgumentNullException was unhandled Message=Value can not be null. Parameter name: Text

无论我点击哪个页面,列表中的第二项总是显示错误。

txtRxNotes.Text = (Application.Current as App).appDosageNotes;
txtQuantity.Text = (Application.Current as App).appQuantity.ToString();

我在网上找到了一些关于 RootVisual 的信息,但我不确定这是否是我所看到的。有人有什么想法吗?

【问题讨论】:

  • 在抛出异常之前,appDosageNotesappQuantity的值是多少?它们中的任何一个都为空吗?
  • 不要使用(Application.Current as App).Foo,而是使用((App)Application.Current).Foo。在第一种情况下,如果Application.Current 不是App,则会出现空引用异常——这是错误的,因为它实际上只是无效类型。仅当您需要知道是否可以转换为给定类型然后使用转换后的对象时才使用as 运算符。你也确定 txtRxNotes/txtQuantity 不为空?
  • @Derek - 他们可能都为空。当我第一次使用此屏幕开始添加数据时,就会发生这种情况。我是否需要检查每个属性以检查它是否为 NULL?有没有办法进行更多的全局检查?
  • 为什么在我将代码从主页(枢轴)移动到由我的枢轴调用的单独页面后会发生这种情况?

标签: windows-phone-7 argumentnullexception


【解决方案1】:

ArgumentNullException 被抛出,因为您尝试为 Text 属性设置的值为 null,这是您无法做到的; Text 属性不是可为空的类型。

如果不知道如何以及何时设置这些应用程序级属性,很难很好地解释为什么在重构后行为有所不同,但您可以:

  • 在访问这些应用程序级属性的代码中进行空检查。
  • 在应用程序构造函数中将应用程序级属性初始化为string.Empty

【讨论】:

  • 我对所有内容都进行了空检查,这似乎有效......但是,我喜欢在初始化应用程序级属性时使用 string.Empty 修复。我也会试试的。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多