125 votes

Un initialisateur de champ ne peut pas faire référence à un champ, une méthode ou une propriété non statique.

J'ai une classe et lorsque j'essaie de l'utiliser dans une autre classe, je reçois l'erreur ci-dessous.

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");
        }

    }
}

Utilisation de la classe dans une autre classe

class SomeOtherClass
{  
    private Reminders reminder = new Reminders();
    // error happens on this line:
    private dynamic defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)]; 
    ....

Erreur (CS0236) :

A field initializer cannot reference the nonstatic field, method, or property

Pourquoi cela se produit-il et comment le réparer ?

-1voto

Hasan Shouman Points 46

L'initialisation doit se faire dans le constructeur. C'est ce qu'il faut faire :

    class SomeOtherClass
    {  
        private Reminders reminder ;
        // error happens on this line:
        private dynamic defaultReminder ;

    public SomeOtherClass()
    {
remider = new Reminders();
    defaultReminder =reminder.TimeSpanText[TimeSpan.FromMinutes(15)]; 
      }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X