2013-09-25 23 views
-3

我需要從靜態函數中訪問我的'文件'列表。我不需要修改列表的內容,我只需要訪問其內容,以便我可以在foreach循環中循環訪問它。我對C#很陌生,但通過其他語言的知識,我假設我需要創建一個文件列表的實例?我Google看到如何製作一個聲明清單<>的實例,但沒有找到任何東西。參考列表<>靜態函數內的對象?

任何幫助將不勝感激!

List<string> files = new List<string>(); 

private static async Task Search() 
{ 
    string input = "<root>value</root>"; 
    using (XmlReader r = XmlReader.Create(new StringReader(input), new XmlReaderSettings() { Async = true })) 
    { 

     foreach (string file in files) 
     { 
      XmlDocument xmlDoc = new XmlDocument(); 
      xmlDoc.Load(file); 
      while (await r.ReadAsync()) 
      { 
       switch (r.NodeType) 
       { 
        case XmlNodeType.Element: 
         Console.WriteLine(r.LocalName); 
         break; 

        case XmlNodeType.Text: 
         Console.WriteLine(await r.GetValueAsync()); 
         break; 
       } 
      } 
     } 
    } 
} 
+1

在靜態情況下使用它,'files'必須是靜態 – wudzik

+0

可否請你告訴我這個在一個答案?也許你可以解釋爲什麼這樣做比創建一個實例更好,或者在這裏沒有必要?感謝:-) – jskidd3

+0

請放置您的代碼而不是照片,節省從那些回答您的人的努力 –

回答

2

這是一個輔助方法模式:

private static async Task Search(List<string> files){ 
    //... 
}  
//Then just use like this 
Search(files); 

您也可以使用一些擴展方法用於此目的:

public static class StringListExtension { 
    public static async Task Search(this List<string> files){ 
     //... 
    } 
} 
//Then just use like this 
files.Search(); 
+0

爲什麼這個解決方案比簡單地在文件列表前添加靜態列表(作爲其他答案的建議之一)? – jskidd3

+0

@JoelKidd我不是說這樣比較好。這是一個解決方案。在許多情況下,你可能不想聲明你的'List'是靜態的。 –

+1

因爲,你知道,是靜態的。該方法的整個設置很奇怪,爲什麼你會有一個依賴實例變量的靜態方法?如果你想要一個單獨的方法來操作一個參數,使它成爲一個參數。然後你甚至可以將它抽象到它自己的類中,比如'FileSearcher.Search(string [] files)'。 – CodeCaster

1

在靜態方法,你可以只使用靜態字段和屬性(msdn)。

靜態方法和屬性不能訪問非靜態字段和 事件在它們的包含類型,並且除非它是在一個方法 參數顯式地傳遞他們不能訪問任何對象的實例 變量。

更改的文件到:

static List<string> files = new List<string>(); 
0

您的List應該是靜態

static List<string> files = ....