循环中的变量

3

我想知道在“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",因为这会使代码更难理解。

有没有其他方法可以实现相同的功能?


3
可以的,你可以称之为数组。 - Eugen Rieck
“messagei” 是一个未声明的变量名称。在 C# 中,您无法使用动态变量名称。 - Oded
你有很多达成目标的选择。但问题是,你的业务需求是什么?在你的情况下,为每个变量赋予适当的名称并通过读取相应的索引将适当的值存储在该变量中可能是最完美的选择。简单的代码应该优先于使用花哨的API(例如反射)。 - Manish Basantani
9个回答

13

你不想要三个同名的变量,而是要一个包含这些变量的数组。

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" }; 
(Note: 数组初始化有更多有效的语法方式。研究其他各种方法留作练习。)
通过循环(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
}

然后当然使用 messages[i] = "blabla" + i.ToString(); 对于正确的指示加1。 - Shai

2

你可以使用数组或列表类型吗?

string[] messages = new string[3];
for (int i = 1; i <=3; i++)
 {
   messages[i] = "blabla" + i.ToString();
 }

1

你说你不想使用 switch 语句。我知道这段代码中有一个 switch,但如果你必须要有三个不同的变量,你可以将 switch 封装在一个函数调用内:

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

你不能这样做(好吧,不是很明智)。你考虑过使用字符串数组吗?


0

我认为你应该使用数组来存储这种类型的变量。

string[] message = new string[3];
for (int i = 1; i <=3; i++)
{
     message[i] = "blabla" + i.ToString();
}

0
通常情况下,不会使用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
我会用不同的方法去处理它,也许会使用一个字典来存储你的消息。可以像这样实现:
 Dictionary<string, string> messages = new Dictionary<string, string>();
 for(int i = 1; i <= 3; i++)
 {
      messages.Add("message" + i.ToString(), i.ToString());
 }

0

你也可以不使用索引来实现:

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

    foreach (String Message in Messages)
    {
        Response.Write("Hello " + Message + "<br />");
    }

-1
如果您在类中将变量声明为公共变量,您可以按以下方式访问它们:
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());

         }
    }




}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接