C# - Это объявляется, строка рассматривала как константа?

Вы были , поэтому близки к вашей первоначальной реализации. Я не знаю, введена ли в вашей книге нотация * (звездочка), но вы можете передать каждый элемент в итерируемом с *my_iter

примерно так: my_function(*my_iter)

или просто поместите его в кортеж: (val_a, val_b, val_c, *val_iter)

быстрый пример:

my_list = [1,2,3,4]
my_tuple = (5,6,7,8)

combined_list = [*my_list, *my_tuple]
print(combined_list)

[1, 2, 3, 4, 5, 6, 7, 8] [1112 ]

Теперь вернемся к вашему вопросу: используя обозначение *, мы можем легко решить вашу проблему со звездочкой, чтобы ваш список строк передавался элемент за элементом в ''.join():

phrase = "Don't panic!"
plist = list(phrase)
new_phrase = ''.join([*plist[1:3], plist[5], plist[4], plist[7], plist[6]])
print(new_phrase)

на кране

6
задан Mr. Flibble 10 February 2009 в 11:44
поделиться

6 ответов

В последнем отрывке, не то, чтобы строка является константой - случается так, что переменная является константой. Это - не совсем то же как константа в C++. (Строки всегда неизменны в.NET.)

И да, эти два отрывка делают то же самое. Единственная разница - то, что в первой форме у Вас будет запись метаданных для s также, и если переменная объявляется на уровне типа (вместо того, чтобы быть локальной переменной) затем, другие методы могли использовать его также. Конечно, должный представить интернирование в виде строки, если Вы используете "sql cmd" в другом месте, у Вас все еще только будет единственный строковый объект в памяти..., но если Вы посмотрите на тип с отражением, то Вы найдете константу как поле в метаданных со вторым отрывком, если будет объявлено как постоянное поле, и если это будет просто локальная переменная, то это будет в файле PDB при создании того.

7
ответ дан 9 December 2019 в 20:50
поделиться

Да, это - точно то же.

1
ответ дан 9 December 2019 в 20:50
поделиться

конструктор SqlCommand не будет "видеть" различия и будет поэтому действовать одинаково.

1
ответ дан 9 December 2019 в 20:50
поделиться

Значение a const всегда записывается непосредственно в вызывающую сторону, таким образом, да они идентичны.

Кроме того, компилятор интернирует строки, найденные в исходном коде - a const полезно, если Вы используете ту же строку многократно (просто от угла обслуживания - результатом является то же так или иначе).

2
ответ дан 9 December 2019 в 20:50
поделиться

Да, не стесняйтесь использовать Отражатель для рассмотрения блока, строки константы будут заменены литеральными строками на компиляции. У меня также есть сообщение в блоге об этом к сейфу Вы работа использования Отражателя :)

1
ответ дан 9 December 2019 в 20:50
поделиться

Я не на 100% уверен в этом, но я держал пари, что это - то же.

константа просто удостоверится, что Вы не делаете reassing переменная, но это - что-то, что может быть сделано во время компиляции.

Morover, строки неизменны, таким образом, я не думаю, что он будет иметь любое значение, объявляя переменную или нет.

Однако определенные доказывают, изучил бы код IL, сгенерированный в обоих случаях.

0
ответ дан 9 December 2019 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: