我有一个课程,当我尝试在另一个课程中使用它时,出现以下错误。
using System; using System.Collections.Generic; using System.Linq; namespace MySite { public class Reminders { public Dictionary<TimeSpan, string> TimeSpanText { get; set; } // We are setting the default values using the Costructor public Reminders() { TimeSpanText.Add(TimeSpan.Zero, "None"); TimeSpanText.Add(new TimeSpan(0, 0, 5, 0), "5 minutes before"); TimeSpanText.Add(new TimeSpan(0, 0, 15, 0), "15 minutes before"); TimeSpanText.Add(new TimeSpan(0, 0, 30, 0), "30 minutes before"); TimeSpanText.Add(new TimeSpan(0, 1, 0, 0), "1 hour before"); TimeSpanText.Add(new TimeSpan(0, 2, 0, 0), "2 hours before"); TimeSpanText.Add(new TimeSpan(1, 0, 0, 0), "1 day before"); TimeSpanText.Add(new TimeSpan(2, 0, 0, 0), "2 day before"); } } }
在另一个班级中使用班级
class SomeOtherClass { private Reminders reminder = new Reminders(); // error happens on this line: private dynamic defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)]; ....
错误(CS0236):
A field initializer cannot reference the nonstatic field, method, or property
为什么会发生以及如何解决?
这行:
private dynamic defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)];
您不能使用实例变量来初始化 另一个 实例变量。为什么?由于编译器可以重新排列这些内容- 无法保证reminder将在之前进行初始化defaultReminder,因此上述行 可能会 抛出NullReferenceException。
reminder
defaultReminder
NullReferenceException
相反,只需使用:
private dynamic defaultReminder = TimeSpan.FromMinutes(15);
或者,在构造函数中设置值:
private dynamic defaultReminder; public Reminders() { defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)]; }
有关此编译器错误的更多详细信息,请参见MSDN-编译器错误CS0236。