DateTime 问题 - 对象外部可用但内部不可用的值
Posted
技术标签:
【中文标题】DateTime 问题 - 对象外部可用但内部不可用的值【英文标题】:DateTime issue - value available outside object but not inside 【发布时间】:2011-04-27 00:31:09 【问题描述】:这是一个非常令人沮丧和奇怪的问题,如果您能就如何解决这个问题提供任何建议,我将不胜感激。
我有一个带有私有变量的对象:
private DateTime _maturityDate = DateTime.MaxValue;
它有一个对应的属性:
public DateTime MaturityDate get; set;
我有一个方法可以更新数据库中的数据,称为 UpdateInstrumentBase()。该属性是从 Windows 窗体上的 DateTimePicker 控件设置的。它是通过代码设置的,而不是通过数据绑定:
((Instrument)instrumentBS.DataSource).MaturityDate = dateTimePicker9.Value;
这正确设置了值:
(我不能发布图片,所以你必须相信我会这样做)
但是 - 这是真正奇怪的问题 - 当您进入对象时,这就是属性设置的内容。即使尝试在即时窗口中或使用 console.writeline 输出它也会导致以下结果:
? _maturityDate System.DateTime 日期:无法评估表达式,因为线程在某个点停止 垃圾收集在哪里 不可能,可能是因为代码 已优化。
我尝试将日期值作为字符串传递,然后转换为 DateTime 作为一种解决方法,但是对 ANY DateTime 属性或变量的任何访问 - 不仅仅是这个 - 在这个对象内都会导致这个错误。我搜索了高低,但我什至不确定此错误消息是否相关或有用。
如果相关,我在 Visual Studio 2008 版本 9.0.21022.8 中使用 .NET Framework 3.5 SP1。
我被难住了。该对象非常复杂,因此我不愿发布整个内容,但如果有人有任何想法,我将发布相关代码。
提前致谢!
【问题讨论】:
“对象相当复杂”——通常表明你做错了...... 在调试器中使用Console.WriteLine
not 将not 给出该结果。你还没有描述不调试时出现了什么问题。
很遗憾,同意奥斯汀。尝试使用具有上述DateTime
属性的类创建一个简单的独立项目,并确保它正常工作。我从来没有见过你用简单属性(DateTime
或其他)描述的问题,所以它可能是你的类复杂性的一个奇怪的副产品。
我的意思是它有很多很多属性,并不是说它很复杂。这不是真的 - 它只是存储值。
项目中的其他对象确实正确存储了 DateTime 值。
【参考方案1】:
这不是您的代码中的错误。这里发生的情况是 C# 调试器正在尝试评估一个表达式,并从 CLR 获取返回值 CORDBG_E_ILLEGAL_AT_GC_UNSAFE_POINT
或 CORDBG_E_ILLEGAL_IN_OPTIMIZED_CODE
。这些是错误代码,表明无法在当前上下文中评估表达式,并且与实际用户代码几乎没有关系。
Mike Stall 对这些消息以及它们发生的原因进行了很好的细分,这可能值得一读。
http://blogs.msdn.com/b/jmstall/archive/2005/11/15/funceval-rules.aspx很遗憾,尽管您几乎无法解决这个问题。除非问题是您正在调试优化,在这种情况下关闭优化将解决问题。
【讨论】:
啊哈。现在我知道“funceval 是邪恶的”,这似乎更清楚了。 @Matt,funceval 不是纯粹的邪恶。这就像一个善意的朋友,只是不可避免地一次又一次地搞砸情况;)【参考方案2】:观察:
根据您在上面发布的内容,
public DateTime MaturityDate get;放;
是一个自动属性 (http://msdn.microsoft.com/en-us/library/bb384054.aspx),应该与 _maturityDate 没有关联。
我错过了什么吗?
【讨论】:
以上是关于DateTime 问题 - 对象外部可用但内部不可用的值的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:“datetime.date”对象不可下标
是否有办法知道对象内部是否具有不可迭代的NoneType对象
Android存储及getCacheDir()getFilesDir()getExternalFilesDir()getExternalCacheDir()区别