猿问

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

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

我有一个类,当我尝试在另一个类中使用它时,我会收到下面的错误。

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

为什么会发生这种情况,以及如何解决?


LEATH
浏览 818回答 3
3回答

慕田峪4524236

您需要将该代码放入类的构造函数中:private&nbsp;Reminders&nbsp;reminder&nbsp;=&nbsp;new&nbsp;Reminders();private&nbsp;dynamic&nbsp;defaultReminder;public&nbsp;YourClass(){ &nbsp;&nbsp;&nbsp;&nbsp;defaultReminder&nbsp;=&nbsp;reminder.TimeSpanText[TimeSpan.FromMinutes(15)];}原因是不能使用一个实例变量来使用字段初始化器初始化另一个实例变量,因为字段初始化程序的执行顺序是未定义的。

慕森王

你可以这样用private&nbsp;dynamic&nbsp;defaultReminder&nbsp;=>&nbsp;reminder.TimeSpanText[TimeSpan.FromMinutes(15)];
随时随地看视频慕课网APP
我要回答