Erreur du compilateur CS0116

Un espace de noms ne peut pas contenir directement de membres comme des champs ou des méthodes.

Un espace de noms peut contenir d’autres espaces de noms, des struct et des classes. Pour plus d'informations, voir l’article Mot clé d’espace de noms.

Exemple

Avec l’exemple suivant, Visual Studio marque des parties du code comme étant contraires à CS0116. Un échec de build se produit :

// CS0116.cs
namespace x
{
    // A namespace can be placed within another namespace.
    using System;

    // These variables trigger the CS0116 error as they are declared outside of a struct or class.
    public int latitude;
    public int longitude;
    Coordinate coord;

    // Auto-properties also fall under the definition of this rule.
    public string LocationName { get; set; }

    // This method as well: if it isn't in a class or a struct, it's violating CS0116.
    public void DisplayLatitude()
    {
        Console.WriteLine($"Lat: {latitude}");
    }

    public struct Coordinate
    {
    }

    public class CoordinatePrinter
    {
        public void DisplayLongitude()
        {
            Console.WriteLine($"Longitude: {longitude}");
        }

        public void DisplayLocation()
        {
            Console.WriteLine($"Location: {LocationName}");
        }
    }
}

Sachez que, en C#, les méthodes et les variables doivent être déclarées et définies dans un struct ou une classe. Pour plus d’informations sur la structure des programmes en C#, voir l’article Structure générale d’un programme C#. Pour corriger cette erreur, réécrivez votre code de sorte que toutes les méthodes et tous les champs soient contenus dans un struct ou une classe :

namespace x
{
    // A namespace can be placed within another namespace.
    using System;

    // These variables are now placed within a struct, so CS0116 is no longer violated.
    public struct Coordinate
    {
        public int Latitude;
        public int Longitude;
    }

    // The methods and fields are now placed within a class, and the compiler is satisfied.
    public class CoordinatePrinter
    {
        Coordinate coord;
        public string LocationName { get; set; }

        public void DisplayLatitude()
        {
            Console.WriteLine($"Lat: {coord.Latitude}");
        }

        public void DisplayLongitude()
        {
            Console.WriteLine($"Longitude: {coord.Longitude}");
        }

        public void DisplayLocation()
        {
            Console.WriteLine($"Location: {LocationName}");
        }
    }
}

Voir aussi