Оголосіть і призначте декілька рядкових змінних одночасно


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

Відповіді:


149

Ви можете зробити це так:

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

Спочатку вам потрібно визначити змінні, а потім ви можете використовувати їх.


@Habib чи можемо ми зробити те саме для сеансу та viewbag? Session["a"] = ViewBag.aa = "hello";
Наприклад

7
@Dhwani, не впевнений, чому ти не спробуєш
Хабіб

48

Ви можете зробити це таким чином:

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

Або ви можете спочатку оголосити їх усі, а потім у наступному рядку використовувати свій шлях.


2
Ви повинні використовувати String.Empty (String.Empty не створює жодного об'єкта, тому він ефективніший, ніж "", а також читабельність краща)
Matija Grcic

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

1
Ах, я бачив зараз. Ви маєте рацію, це те саме, за винятком того, що насправді включено гідне форматування.
EternalWulf


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працює лише з (a) оголошенням, яке має значення ініціалізації (з якого можна вивести тип), та (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;

Введіть усі імена змінних у нових рядках. Multi-Select перед ними тип "рядок". Виберіть кілька за ними та введіть "= string.Empty;".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.