【问题标题】:accessing variable outside for loop在for循环外访问变量
【发布时间】:2011-01-09 13:42:09
【问题描述】:

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

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

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

显示的错误是

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

【问题讨论】:

  • 您可能想要添加标签“变量范围”等。或者谷歌这个词。

标签: c# for-loop scope


【解决方案1】:

变量的范围没有扩展到循环之外。如果你想访问它的值,你需要将它保存到另一个更大范围的变量中,像这样:

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());

【讨论】:

  • 要么你不需要Select,要么你还需要ToArray()
  • @SLaks:为什么是or?他不需要Select()ToArray() 吗?
  • @zerkms:在 .Net 3.5 中,Join 只需要一个数组。在 .Net 4.0 中,它还需要 IEnumerable&lt;T&gt; 并为您调用 ToString()msdn.microsoft.com/en-us/library/dd992421.aspx
【解决方案2】:

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

请注意,这不会执行您希望它执行的操作,因为您没有附加字符串。
相反,您应该使用 StringBuilder。
如果i &gt; 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());

【讨论】:

  • 那么我需要存储什么结果
  • 我的列表在这里给出了 4 个整数值,它还能自己替换最后一个逗号吗??
  • SqlCommand cmd2 = new SqlCommand("select id,name from plugins where id =(" + str1 + ")" , con);
  • 我需要使用上述查询中的值,但它显示错误,即“,”附近的语法错误有人可以解释原因吗:(
【解决方案3】:
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);

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

【讨论】:

    【解决方案4】:

    在循环开始之前声明变量str。因为在for循环中声明的变量str超出了作用域,因此是编译错误。

    【讨论】:

      【解决方案5】:
      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】:

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

        String.Join(",", yourlist);
        

        【讨论】:

        • 你的意思是String.Join。此外,这仅适用于 .Net 4.0。看我的回答。
        【解决方案7】:

        试试下面的代码:

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

        【讨论】:

          猜你喜欢
          • 2020-06-22
          • 2017-12-08
          • 1970-01-01
          • 2012-05-11
          • 1970-01-01
          • 2012-11-11
          • 1970-01-01
          • 2021-04-11
          • 1970-01-01
          相关资源
          最近更新 更多