在for循环中访问变量

时间:2011-01-09 13:42:10

标签: c# for-loop scope

如何在for循环外部访问for循环中指定了某个值的字符串 我可能会为您提供方便的代码

for (Int32 i = 0; i < yourlist.Count; i++)
    {
        String str=(yourlist[i].ToString() + ",");
    }

    String str1 = (str).Substring(0, str.Length - 1);

显示的错误是

  

当前上下文中不存在名称'str'

7 个答案:

答案 0 :(得分:7)

变量的范围不会扩展到循环外部。如果要访问其值,则需要将其保存到具有更大范围的另一个变量,如下所示:

string str;
for (Int32 i = 0; i < yourlist.Count; i++)
{
    str=(yourlist[i].ToString() + ",");
}

String str1 = (str).Substring(0, str.Length - 1);

但是,您尝试做的事情可以简单地完成:

var str1 = string.Join(",", yourlist.Select(o => o.ToString()).ToArray());

答案 1 :(得分:3)

for循环(或任何其他范围)内声明变量时,它不存在于该范围之外。
你需要在循环之外声明变量。

请注意,这不会执行您想要的操作,因为您没有附加字符串 相反,您应该使用StringBuilder 只需添加", " i > 0

,您就可以更简单一些

在.Net 4.0中,您可以使用new overload of String.Join

替换整个循环
string str1 = String.Join(", ", yourlist);

在.Net 4.0之前,您可以将其替换为

string str1 = String.Join(", ", yourlist.Select(o => o.ToString()).ToArray());

答案 2 :(得分:0)

String str = string.Empty;

for (Int32 i = 0; i < yourlist.Count; i++)
{
    str=(yourlist[i].ToString() + ",");
}

String str1 = (str).Substring(0, str.Length - 1);

此外,您可能希望将结果存储回str变量

 str = (str).Substring(0, str.Length - 1);

在这种情况下,您不需要再声明一个变量

答案 3 :(得分:0)

尝试以下代码:

 String str = "";

 for (Int32 i = 0; i < yourlist.Count; i++)   
   {   
      str =(yourlist[i].ToString() + ","); 
   }   
 String str1 = (str).Substring(0, str.Length - 1); 

答案 4 :(得分:0)

在循环开始之前声明变量str。因为在for循环中声明的变量str超出了范围,因此编译时出错。

答案 5 :(得分:0)

String str;
for (int i = 0; i < yourlist.Count; i++)
{
    str = (yourlist[i].ToString() + ",");
}
str1 = str.Substring(0, str.Length - 1);

但编写此代码的更好方法是:

str1 = string.Join(",", yourlist);

虽然“str”和“str1”确实是变量的坏名称。他们没有任何意义。变量名应该具有该变量存储的线索,而不是其数据类型。

答案 6 :(得分:0)

String.Join就是你想要的。您不必使用循环。

String.Join(",", yourlist);