声明并同时分配多个字符串变量


76

我声明了一些空字符串,因此以后不会抛出错误。

我读过,这是正确的方法:

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

但这是行不通的。我收到此错误:Klantnr does not exist in the current context

我做错什么了?


4
您为什么要在C#中这样做。它不可读,外观丑陋,就像一个糟糕的Javascript。
Matija Grcic

3
因为我想在开始时声明变量,然后稍后动态定义它们(取决于给定的输入)
Mathlight 2012年

Answers:


149

您可以这样做:

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

首先,您必须定义变量,然后才能使用它们。


@Habib我们可以对会话和viewbag做同样的事情吗?喜欢:Session["a"] = ViewBag.aa = "hello";
Dhwani 2014年

6
@Dhwani,不确定,您为什么不尝试
Habib

47

您可以这样进行:

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

或者,您可以先声明它们,然后在下一行中使用您的方式。


2
您应该使用String.Empty(String.Empty不创建任何对象,因此比“”更有效,可读性也更好)
Matija Grcic 2012年

5
@plurby,string.Empty与使用相同""。见stackoverflow.com/questions/263191/...
哈比

“”将为每个程序集创建一次,或为每个AppDomain创建一次(性能微不足道,但我想指出一种更具可读性的方法)。
Matija Grcic

1
@plurby我已经将该选项添加为注释。但是,就性能而言,您很可能根本不会注意到任何差异,并且某些人还发现“”更易于阅读。我想说这取决于个人(或团队)的偏好,因此我在问题中使用了相同的内容。
Botz3000

8

我称之为“串联声明”的示例:

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

只需我的2美分,希望它对某人有所帮助。


4
感谢您的2美分。但是,看来您的答案与botz3000的答案相同(仅您使用缩进)
Mathlight 2014年

1
啊,我现在看到了。没错,这是一样的,除了它实际上包含了不错的格式。
EternalWulf 2014年


4

尝试

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 = "";

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

3

提醒一下:不允许在多个声明中使用隐式类型var可能存在以下编译错误。

var Foo = 0, Bar = 0;

隐式类型的变量不能有多个声明符

同样,

var Foo, Bar;

隐式类型的变量必须初始化



1

所有信息都包含在现有答案中,但是我个人希望提供一个简洁的摘要,因此请尝试一下。这些命令int为了简洁起见使用了变量,但是它们类似地适用于任何类型,包括string

声明多个变量

  • 分别:初始化每个
int i = 0, j = 1; // declare and initialize each; `var` is NOT supported as of C# 8.0
  • 或:将它们全部初始化为相同的值
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;

什么不起作用

  • 不能使用var在上面的语句,因为var只有(一)有一个初始化值(该类型可以推断)的声明,和(b)的作品,如C#8.0中,如果该声明是唯一一个在语句(否则您将得到编译错误error CS0819: Implicitly-typed variables cannot have multiple declarators)。

  • 配售后,才初始化值最后在多重声明语句变量初始化只有最后一个变量

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


0

相当老的问题,但万一有人回去。
这不像上面的其他答案那么紧凑,但是使用Visual Studio多行选择快捷键[Alt + Shift +↑](或其他方向)相当易读且易于键入。

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

在新行上键入所有变量名称。在其前面多选一个“字符串”类型。在它们后面多选,然后输入“ = string.Empty;”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.