Errore del compilatore CS0116

Uno spazio dei nomi non può contenere direttamente membri come campi o metodi.

Uno spazio dei nomi può contenere altri spazi dei nomi, struct e classi. Per altre informazioni, vedere l'articolo relativo alla parola chiave namespace.

Esempio

L'esempio seguente fa sì che alcune parti del codice vengano contrassegnate da Visual Studio come in violazione del CS0116. Se si prova a compilare questo codice si verifica un errore di compilazione:

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

Tenere presente che in C# i metodi e le variabili devono essere dichiarati all'interno di uno struct o di una classe. Per altre informazioni sulla struttura di un programma in C#, vedere l'articolo Struttura generale di un programma C#. Per correggere questo errore, riscrivere il codice in modo che tutti i metodi e i campi siano contenuti in uno struct o una 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}");
        }
    }
}

Vedi anche