89 votes

Déclarer et affecter plusieurs variables de type chaîne en même temps

Je déclare des chaînes de caractères vides, afin d'éviter les erreurs ultérieures.

J'ai lu que c'était la bonne façon de faire :

string Camnr = Klantnr = Ordernr = Bonnr = Volgnr = Omschrijving = Startdatum = Bonprioriteit = Matsoort = Dikte = Draaibaarheid = Draaiomschrijving = Orderleverdatum = Regeltaakkode = Gebruiksvoorkeur = Regelcamprog = Regeltijd = Orderrelease = "";

Mais ça ne marche pas. J'obtiens cette erreur : Klantnr does not exist in the current context .

Qu'est-ce que j'ai fait de mal ?

4voto

string Camnr , Klantnr , Ordernr , Bonnr , Volgnr , Omschrijving , Startdatum , Bonprioriteit , Matsoort , Dikte , Draaibaarheid , Draaiomschrijving , Orderleverdatum , Regeltaakkode , Gebruiksvoorkeur , Regelcamprog , Regeltijd , Orderrelease;
Camnr = Klantnr = Ordernr = Bonnr = Volgnr = Omschrijving = Startdatum = Bonprioriteit = Matsoort = Dikte = Draaibaarheid = Draaiomschrijving = Orderleverdatum = Regeltaakkode = Gebruiksvoorkeur = Regelcamprog = Regeltijd = Orderrelease = string.Empty;

4voto

themefield Points 393

Juste un rappel : Type implicite var dans une déclaration multiple n'est pas autorisée. Il peut y avoir les erreurs de compilation suivantes.

var Foo = 0, Bar = 0;

Les variables implicitement typées ne peuvent pas avoir plusieurs déclarateurs.

De même,

var Foo, Bar;

Les variables implicitement typées doivent être initialisées.

4voto

mklement0 Points 12597

Toutes les informations sont dans les réponses existantes, mais j'ai personnellement souhaité un résumé concis, donc voici une tentative ; les commandes utilisent int pour des raisons de brièveté, mais elles s'appliquent par analogie à tous les types, y compris les string .

A déclarer des variables multiples et :

  • soit : les initialiser avec valeurs distinctes :

    int i = 0, j = 1; // declare and initialize each, single-type only. // Note: var is NOT supported as of C# 8.0, but see below.

    // === // C# 7.0+ / .NET Framework 4.7+ using syntactic sugar based on value tuples:

    // Infer the types from the RHS tuple elements. var (i, s) = (0, "hi");

    // Explicitly type the individual variables. (int i, string s) = (0, "hi");

  • ou : les initialiser tous avec le même valeur :

    int i, j; // declare first (var is NOT supported) i = j = 42; // then initialize

    // Single-statement alternative that is perhaps visually less obvious: // Initialize the first variable with the desired value, then use // the first variable to initialize the remaining ones. int i = 42, j = i, k = i;


Qué no travail :

  • À moins que vous n'utilisiez la syntaxe valeur-tuple, vous ne pouvez pas utiliser var dans les déclarations ci-dessus, car var ne fonctionne qu'avec (a) une déclaration qui possède une valeur d'initialisation (à partir de laquelle le type peut être déduit), et (b), à partir de C# 8.0, si cette déclaration est la déclaration de type uniquement un dans la déclaration (sinon vous obtiendrez une erreur de compilation error CS0819: Implicitly-typed variables cannot have multiple declarators ).

  • Placer une valeur d'initialisation seulement après le dernier dans une déclaration à déclarations multiples initialise la variable dernière variable seulement :

    int i, j = 1; // initializes *only* j

4voto

On peut aujourd'hui déclarer et initialiser plusieurs variables de la manière suivante :

var (anInt, aFloat, aBoolean, aChar, aString, anArray, aRecordType, anObjectType) = 
    (1, 2.14, true, 'a', "C# is awesome!", new[] { "Asia", "Europe" } , new Country { Name = "India"}, new City { Name = "Kolkata"} ); 
Console.WriteLine(anInt);
Console.WriteLine(aFloat);
Console.WriteLine(aBoolean);
Console.WriteLine(aChar);
Console.WriteLine(aString);
Array.ForEach(anArray, Console.WriteLine);
Console.WriteLine(aRecordType.Name);
Console.WriteLine(anObjectType.Name);

Voici la définition des types personnalisés requis :

internal record Country { internal string Name {get; set;}}
internal class City { internal string Name {get; set;}}

Ceci a été testé sur .NET 5/C# 9.

Following is the output in Linqpad:

3voto

Jacek Points 31

string a = "", b = a , c = a, d = a, e = a, f =a;

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