2016-06-09 129 views
0

所以我有一个文件夹只有2个文本文件,我正在读取它们并存储值。这是代码如下:未分配的局部变量错误

public static void UnionFiles() 
{ 
    var dinfo = 
     new DirectoryInfo(
      @"\http"); 
    var files = dinfo.GetFiles("*.txt"); 
    int i = 1; 
    System.Collections.Generic.IEnumerable<String> _eValA, _eValB; 

    foreach (var file in files) 
    { 
     if (i == 1) 
     { 
      _eValA = File.ReadLines(file.Name); 
      ++i; 
     } 
     else 
     { 
      _eValB = File.ReadLines(file.Name); 
      i = 1; 

     } 
    } 
    IEnumerable<String> union = _eValA.Union(_eValB); 
    File.WriteAllLines(@"\http\union.txt", union.Cast<String>()); 
} 

但我得到这个错误:我怎样才能过去,Use of unassigned local variable '_eValB, _eValA'

谢谢。

+0

如果需要,在声明中初始化为'null'。 – sstan

+0

@sstan我知道它可能是重复的,但至少有100个问题与类似的前提。你指出的那个没有确切的前提,但是有一个类似的前提。 –

+1

它不必是*确切的*。如果它指向适当的信息,那么类似的就非常好。我们不是为了解决每个人的具体问题,而是分享*知识*。您有责任使用这些知识并将其应用于您的情况。我们不需要200个问题,如*我如何添加两个整数变量A和B?*,后面是*如何添加两个整数变量B和C?我看到了关于A&B的一个,但我的变量名称不同。* –

回答

2

通过循环的第一次,你永远不会有_evalA_evalB分配。您需要分配给两者以避免该问题。

还有其他相关的问题。例如,当没有两个文件时会发生什么?

由于正好有两个文件,所以不需要使用循环。如果避免循环,可以轻松避免当前的问题。例如:

var files = dinfo.GetFiles("*.txt"); 
System.Collections.Generic.IEnumerable<String> _eValA, _eValB; 

// Should really assert that files.Count == 2 
_evalA = File.ReadLines(files.First().Name); 
_eValB = File.ReadLines(files.Last().Name); 

IEnumerable<String> union = _eValA.Union(_eValB); 
+0

谢谢,也许是最谨慎的方式。 –

0

想想你的代码可能采取的路径。有可能_eValA可能未被初始化,或者_eValB可能未被初始化,因此您将收到错误。由于编译器可以检测到这一点,它会给你一个编译错误。您需要确保它们的值等于一个值(或者为null,这会让编译器知道您要为它们负责,正如here所解释的那样),但是在这种情况下注释null不合适,因为使用0或1个文件你会得到一个ArgumentNullException在呼叫.Union),然后再使用它们。试试:

var _eValA = new string[0]; 
var _eValB = new string[0]; 

foreach (var file in files) 
{ 
    if (i == 1) 
    { 
     _eValA = File.ReadLines(file.Name); 
     ++i; 
    } 
    else 
    { 
     _eValB = File.ReadLines(file.Name); 
     i = 1; 
    } 
} 

这将确保它们在使用前都得到初始化。

+0

谢谢。工作。 –

+0

为什么你会在那里创建一个数组实例? –

+0

@EvanTrimboli因为eval变量需要在使用前初始化。这是真的出可重构,所以没有必要为它的整个代码块,但我想证明具体为什么错误发生了什么,什么可以做,以满足编译器是很重要的。 – mason