2016-06-09 144 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

相關問題