2011-07-06 22 views
0

我试图从我的主要方法中获取foreach的变量结果。代码如下所示:如何访问foreach之外的变量(C#)

static void Main(string[] args) 
    { 

     ArrayList lines = GetLines("test.txt", "8394", true); 
     foreach (string s in lines) 
     { 
      string result = s; 
     } 
     Console.WriteLine(result); 
    } 

正如您所看到的,它返回一个错误,因为我无法访问foreach之外的变量。 我如何访问它?

+1

您需要定义它的'foreach'外,如果要访问它'外的foreach '...... –

+0

谁做了这个,为什么? – Exa

回答

5

我不明白你想达到什么做的......但代码应该是这样的:

ArrayList lines = GetLines("test.txt", "8394", true); 
string result=string.Empty;  
foreach (string s in lines) 
     { 
      result = s; 
     } 
     Console.WriteLine(result); 

我想你想要做的是这样的:如果

ArrayList lines = GetLines("test.txt", "8394", true); 

foreach (string s in lines) 
     { 
      Console.WriteLine(s); 
     } 
+1

当你只想显示最后一个值时,迭代的意义是什么? –

+0

非常感谢!我甚至把它作为一个方法与该片段:) – Kraffs

+0

你非常欢迎! – danyolgiax

0

ü想要得到如上代码只是当前值是确定的,但如果你想获得行,你建议立即进行删除写

static void Main(string[] args) 
    { 
     string result = string.Empty; 
     ArrayList lines = GetLines("test.txt", "8394", true); 
     foreach (string s in lines) 
     { 
      result += s; 
     } 
     Console.WriteLine(result); 
    } 
1

你的代码是错误的升ogically。通过循环某些行,将它们分配给一个变量,然后执行没有任何操作,然后将下一行分配给新变量(每次循环获取另一行时,另一个变量称为result),依此类推。

这也算是一个逻辑代码:

string names = string.Empty; 
foreach (string name in namesList) 
{ 
    names += ", " + name; 
} 
console.WriteLine(names); 
+2

如果你这样做,你应该总是使用'StringBuilder'而不是仅仅连接你的不可变字符串....否则,你抛出旧的字符串并为每次迭代创建一个新的字符串实例 - **不**非常有效.... –

+0

好暗示@marc_s。我只是在演示:) –

0

需要声明的括号以外的变量{}在室外使用

ArrayList lines = GetLines("test.txt", "8394", true); 
string result;  
foreach (string s in lines) 
     { 
      result = s; 
     } 
     Console.WriteLine(result); 

是显而易见的答案,然而这代码只会向控制台写出线阵列中最后一个参数/项目。

这一切都取决于你想要的东西,如果你想写出行数组的所有内容,你可以在循环内写入每一项的行。例如

ArrayList lines = GetLines("test.txt", "8394", true); 
string result;  
foreach (string s in lines) 
     { 
      result = s; 
      Console.WriteLine(result); 
     } 

会写的每一项

0

foreach循环内声明的任何变量的范围仅限于该循环本身。它不能在循环外部访问。正如@danyolgiax提到的,在循环之外声明变量。然后你将能够访问它。

0

Variables可以通过scope访问。因此,如果您想访问foreach loop以外的变量,请在循环外声明它。

string result = string.Empty; 

foreach (string s in lines)   
{    
    result = s;   
} 
0

foreach循环

string result = "" ; 

foreach (string name in namesList) 
{ 
    names += ", " + name; 
} 

外声明字符串结果....等

+0

如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)格式和语法突出显示它! –