Declare and assign multiple string variables at the same time

C#Variable DeclarationVariable Initialization

C# Problem Overview


I'm declaring some strings that are empty, so it won't throw errors later on.

I've read that this was the proper way:

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

But that doesn't work. I get this error: Klantnr does not exist in the current context.

What did I do wrong?

C# Solutions


Solution 1 - C#

You can do it like:

string Camnr, Klantnr, Ordernr, Bonnr, Volgnr;// and so on.
Camnr = Klantnr = Ordernr = Bonnr = Volgnr = string.Empty;

First you have to define the variables and then you can use them.

Solution 2 - C#

You can to do it this way:

string Camnr = "", Klantnr = "", ... // or String.Empty

Or you could declare them all first and then in the next line use your way.

Solution 3 - C#

An example of what I call Concatenated-declarations:

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

Just my 2 cents, hope it helps someone somewhere.

Solution 4 - C#

Try with:

 string Camnr, Klantnr, Ordernr, Bonnr, Volgnr, Omschrijving;
 Camnr = Klantnr = Ordernr = Bonnr = Volgnr = Omschrijving = string.Empty;

Solution 5 - C#

Try

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

and then

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

Solution 6 - C#

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;

Solution 7 - C#

Just a reminder: Implicit type var in multiple declaration is not allowed. There might be the following compilation errors.

var Foo = 0, Bar = 0;

> Implicitly-typed variables cannot have multiple declarators

Similarly,

var Foo, Bar;

> Implicitly-typed variables must be initialized

Solution 8 - C#

All the information is in the existing answers, but I personally wished for a concise summary, so here's an attempt at it; the commands use int variables for brevity, but they apply analogously to any type, including string.

To declare multiple variables and:

  • either: initialize them with separate values:
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");
  • or: initialize them all with the same value:
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;

What doesn't work:

  • Unless you use the value-tuple syntax, you cannot use var in the above statements, because var only works with (a) a declaration that has an initialization value (from which the type can be inferred), and (b), as of C# 8.0, if that declaration is the only one in the statement (otherwise you'll get compilation error error CS0819: Implicitly-typed variables cannot have multiple declarators).

  • Placing an initialization value only after the last variable in a multiple-declarations statement initializes the last variable only:

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

Solution 9 - C#

One can declare and initialize multiple variables in the following way nowadays:

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

Following are the definition of required custom types:

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

This has been tested on .NET 5/C# 9.

Following is the output in Linqpad:

Solution 10 - C#

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

Solution 11 - C#

Fairly old question but incase someone goes back.
This isn't as compact as the other answers above, but fairly readable and easier to type using Visual Studio Multi-Line selection shortcut [Alt+ Shift + ↑] (or other directions)

string Camnr = string.Empty;
string Klantnr = string.Empty;

Type out all variable names on new lines. Multi-Select in front of them an type "string". Multi-Select behind them and type "= string.Empty;".

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMathlightView Question on Stackoverflow
Solution 1 - C#HabibView Answer on Stackoverflow
Solution 2 - C#Botz3000View Answer on Stackoverflow
Solution 3 - C#EternalWulfView Answer on Stackoverflow
Solution 4 - C#Carlos LanderasView Answer on Stackoverflow
Solution 5 - C#sajanyamahaView Answer on Stackoverflow
Solution 6 - C#Kishore KumarView Answer on Stackoverflow
Solution 7 - C#themefieldView Answer on Stackoverflow
Solution 8 - C#mklement0View Answer on Stackoverflow
Solution 9 - C#Sk Shahnawaz-ul HaqueView Answer on Stackoverflow
Solution 10 - C#LouisView Answer on Stackoverflow
Solution 11 - C#G .View Answer on Stackoverflow