【问题标题】:Declare and assign multiple string variables at the same time同时声明和分配多个字符串变量
【发布时间】:2012-11-02 16:35:23
【问题描述】:

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

我知道这是正确的方法:

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

我做错了什么?

【问题讨论】:

  • 为什么要在 C# 中这样做。它不可读,看起来很丑,就像一个糟糕的 Javascript。
  • 因为我想在开始时声明变量,然后在运行中定义它们(取决于给定的输入)

标签: c# variable-declaration variable-initialization


【解决方案1】:

你可以这样做:

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

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

【讨论】:

  • @Habib 我们可以为 session 和 viewbag 做同样的事情吗?喜欢:Session["a"] = ViewBag.aa = "hello";
  • @Dhwani,不确定,你为什么不试试呢
  • 请注意,这会将所有值分配给同一个引用。因此,例如,如果您将所有变量分配给同一个列表,它将添加到所有集合中。使用 object.ReferenceEquals 在 .NET Framework 中测试。
  • @ellison,是的,但是字符串是不可变的,任何特定变量的任何更改都不会对其他人产生影响。
【解决方案2】:

你可以这样做:

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

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

【讨论】:

  • 你应该使用String.Empty(String.Empty不创建对象所以它比“”更高效,可读性也更好)
  • @plurby, string.Empty 与使用 "" 相同。见stackoverflow.com/questions/263191/…
  • "" 将为每个程序集或每个 AppDomain 创建一次(性能微不足道,但我想指出更具可读性的方法)。
  • @plurby 我已经将该选项添加为评论。但是,在性能方面,您很可能不会注意到任何差异,而且有些人还发现“”更易于阅读。我想说这是个人(或团队)偏好的问题,所以我使用了与问题相同的方法。
【解决方案3】:

我称之为连接声明的示例:

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

只是我的 2 美分,希望它对某个地方的人有所帮助。

【讨论】:

  • 感谢您的 2 美分。但看起来你的答案和botz3000一样(只有你使用缩进)
  • 啊,我现在看到了。你是对的,这是一样的,除了这实际上包含了不错的格式。
【解决方案4】:

尝试:

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

【讨论】:

    【解决方案5】:

    试试

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

    【讨论】:

      【解决方案6】:
      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;
      

      【讨论】:

        【解决方案7】:

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

        var Foo = 0, Bar = 0;
        

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

        同样,

        var Foo, Bar;
        

        必须初始化隐式类型变量

        【讨论】:

          【解决方案8】:

          现在可以通过以下方式声明和初始化多个变量:

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

          以下是所需自定义类型的定义:

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

          这已在 .NET 5/C# 9 上进行了测试。

          【讨论】:

            【解决方案9】:

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

            【讨论】:

            • 请在您的回答中添加一些解释。
            【解决方案10】:

            所有信息都在现有答案中,但我个人希望简明扼要,所以这里尝试一下;为简洁起见,这些命令使用int 变量,但它们类似地适用于任何类型,包括string

            声明多个变量

            • 要么:单独的值初始化它们:
            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");
            
            • 或:相同的值初始化它们:
            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 仅适用于 (a) 具有初始化值的声明(从中可以推断类型),以及 (b),从 C# 8.0 开始,如果该声明是语句中的唯一一个(否则您将收到编译错误error CS0819: Implicitly-typed variables cannot have multiple declarators)。

            • 仅在多重声明语句中的 last 变量之后放置一个初始化值会初始化 last 变量

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

            【讨论】:

              【解决方案11】:

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

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

              在新行中输入所有变量名。多选在他们前面一个类型“字符串”。在它们后面多选并输入“= string.Empty;”。

              【讨论】:

                猜你喜欢
                • 2021-09-08
                • 1970-01-01
                • 2018-08-12
                • 1970-01-01
                • 2021-09-26
                • 2021-09-16
                • 2014-08-27
                • 2011-03-16
                • 2011-04-19
                相关资源
                最近更新 更多