Declare and assign multiple string variables at the same time
C#Variable DeclarationVariable InitializationC# 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, becausevar
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 errorerror 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.
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;".