为了账号安全,请及时绑定邮箱和手机立即绑定

字段初始化程序不能引用非静态字段、方法或属性。

字段初始化程序不能引用非静态字段、方法或属性。

C#
LEATH 2019-06-25 15:02:28
字段初始化程序不能引用非静态字段、方法或属性。我有一个类,当我尝试在另一个类中使用它时,我会收到下面的错误。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)];      ....错误(CS 0236):A field initializer cannot reference the nonstatic field, method, or property为什么会发生这种情况,以及如何解决?
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您需要将该代码放入类的构造函数中:

private Reminders reminder = new Reminders();private dynamic defaultReminder;public YourClass(){
    defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)];}

原因是不能使用一个实例变量来使用字段初始化器初始化另一个实例变量,因为字段初始化程序的执行顺序是未定义的。


查看完整回答
反对 回复 2019-06-25
?
慕森王

TA贡献1777条经验 获得超3个赞

你可以这样用

private dynamic defaultReminder => reminder.TimeSpanText[TimeSpan.FromMinutes(15)];


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 817 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信