Переменные в цикле - PullRequest
       1

Переменные в цикле

3 голосов
/ 27 декабря 2011

Мне было интересно, есть ли способ в цикле "for" присвоить значение строковой переменной, названной в соответствии с ее индексным номером?

Допустим, у меня есть 3 строковые переменные с именем:

string message1 = null;
string message2 = null; 
string message3 = null;

И я хочу, чтобы цикл for выполнял что-то вроде следующего кода:

 for (int i = 1; i <=3; i++)
 {
   messagei = "blabla" + i.ToString();
 }

Я не хочу использовать «if» или «switch», потому что он будетусложнить выполнение кода.

Есть ли способ сделать это?

Ответы [ 9 ]

13 голосов
/ 27 декабря 2011

Вам не нужны 3 переменные с одинаковыми именами, вам нужен массив этих переменных.

string[] messages = new string[3]; // 3 item array

Затем вы можете хранить свои элементы в элементах массива

messages[0] = "Apple"; // array index starts at 0!
messages[1] = "Banana";
messages[2] = "Cherry"; 

Другим способом создания этого массива является встроенный инициализатор массива, сохраняющий некоторый код

string[] messages = { "Apple", "Banana", "Cherry" }; 

(Примечание: существует более допустимый синтаксис для инициализации массива. Исследование различных других методов оставлено в качестве упражнения.)

И получить к ним доступ через цикл (foreach)

foreach (string fruit in messages)
{
    Console.WriteLine("I'm eating a " + fruit);
}

Или для

for (int i = 0; i < messages.Length; i++)
{
    Console.WriteLine("I'm eating a " + messages[i]); // reading the value
    messages[i] = "blabla" + i.ToString(); // writing a value to the array
}
2 голосов
/ 27 декабря 2011

вы можете использовать массив?или тип списка?

string[] messages = new string[3];
for (int i = 1; i <=3; i++)
 {
   messages[i] = "blabla" + i.ToString();
 }
1 голос
/ 27 декабря 2011

Вы сказали, что не хотите иметь заявление о переключении. Я понимаю, что здесь есть переключатель, но если вам нужно иметь три разные переменные, вы можете инкапсулировать свой переключатель внутри вызова функции:

string message1 = null;
string message2 = null; 
string message3 = null;

void SetMessage(int i, string value)
{
    if(i == 1)
        message1 = value;
    etc
}

 for (int i = 1; i <=3; i++)
 {
   SetMessage(i, "blabla" + i.ToString());
 }

Не оптимальное решение, но если у вас ДОЛЖНЫ быть отдельные переменные, это скроет беспорядок.

0 голосов
/ 27 декабря 2011

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

public partial class _Default : System.Web.UI.Page
{
    public string message1 = null;
    public string message2 = null; 
    public string message3 = null;


    public void setVars()
    {
        for (int i = 1; i <=3; i++)
         {
             this.GetType().GetField("message" + i.ToString()).SetValue(this, "blabla" + i.ToString());

         }
    }




}
0 голосов
/ 27 декабря 2011

Вы также можете сделать это без индекса:

    string[] Messages = { "Tom", "Dick", "Harry" };

    foreach (String Message in Messages)
    {
        Response.Write("Hello " + Message + "<br />");
    }
0 голосов
/ 27 декабря 2011

Я бы поступил немного иначе, возможно, воспользовавшись словарем и сохранив ваши сообщения. Примерно так:

 Dictionary<string, string> messages = new Dictionary<string, string>();
 for(int i = 1; i <= 3; i++)
 {
      messages.Add("message" + i.ToString(), i.ToString());
 }
0 голосов
/ 27 декабря 2011

Обычно вместо того, чтобы иметь N разностных переменных с именами 1, 2, ..., N, можно хранить их в массиве:

string message[3];
message[0] = null;
message[1] = null;
message[2] = null; 

, а затем цикл:

for (int i = 0; i <=2; i++)  
{  
   message[i] = "blabla" + i.ToString();  
}  

Обратите внимание, что, как правило, снова набор индексированных переменных начинается со значения 0;)

0 голосов
/ 27 декабря 2011

Я думаю, вы должны использовать массив для такого рода переменных.

string[] message = new string[3];
for (int i = 1; i <=3; i++)
{
     message[i] = "blabla" + i.ToString();
}
0 голосов
/ 27 декабря 2011

Вы не можете сделать это (ну, не разумно).Вы рассматривали возможность использования массива строк вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...