2017-04-25 64 views
0

我想獲得一個uri數組,但是我不知道它是我創建數組時的長度。數組長度應該是變量'文件'中項目數量的長度。 我知道我可以用一個列表來做到這一點,但我想嘗試簡化這一個單一的陣列,爲此,我需要的長度「文件」有沒有辦法獲得enumerateFiles的返回值的長度?

Uri[] imageArray = new Uri[*some amounts of items from 'files'*] 
var files = Directory.EnumerateFiles("C:\\Users\\doggoz\\Documents\\VisualStudio2015\\Projects\\somethinngggggg\\", "*.*", SearchOption.TopDirectoryOnly) 
        .Where(s => s.EndsWith(".jpeg") || s.EndsWith(".jpg") || s.EndsWith(".png") || s.EndsWith(".gif") || s.EndsWith(".bmp")); 
+2

不是沒有枚舉兩次,沒有。 –

回答

2

你可以使用ToArray方法:

var files = Directory.EnumerateFiles("C:\\Users\\doggoz\\Documents\\VisualStudio2015\\Projects\\somethinngggggg\\", "*.*", SearchOption.TopDirectoryOnly) 
        .Where(s => s.EndsWith(".jpeg") 
           || s.EndsWith(".jpg") 
           || s.EndsWith(".png") 
           || s.EndsWith(".gif") 
           || s.EndsWith(".bmp") 
        ).ToArray(); 

var imageArray = new Uri[files.Length]; 

通過我建議你改變了多個或喜歡的東西下面,使你的代碼更易讀的方式:

var extensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase) 
{ ".jpeg", ".jpg", ".png", ".gif", ".bmp" }; 

var files = Directory.EnumerateFiles(@"C:\Users\doggoz\Documents\VisualStudio2015\Projects\somethinngggggg\", "*.*", SearchOption.TopDirectoryOnly) 
        .Where(s => extensions.Contains(Path.GetExtension(s))) 
        .ToArray(); 
0

你可以保持您現有的代碼,只需按照相反的順序放置這些行。這樣,你有文件枚舉時間提前,並且可以訪問Count()方法:

var files = Directory.EnumerateFiles(
    @"C:\Users\doggoz\Documents\VisualStudio2015\Projects\somethinngggggg\", 
    "*.*", SearchOption.TopDirectoryOnly) 
     .Where(s => 
      s.EndsWith(".jpeg") || 
      s.EndsWith(".jpg") || 
      s.EndsWith(".png") || 
      s.EndsWith(".gif") || 
      s.EndsWith(".bmp")); 

Uri[] imageArray = new Uri[files.Count()]; 

或者,你可以將結果轉換爲URI陣列內聯:

Uri[] imageArray = Directory.EnumerateFiles(
    @"C:\Users\doggoz\Documents\VisualStudio2015\Projects\somethinngggggg\", 
    "*.*", SearchOption.TopDirectoryOnly) 
     .Where(s => 
      s.EndsWith(".jpeg") || 
      s.EndsWith(".jpg") || 
      s.EndsWith(".png") || 
      s.EndsWith(".gif") || 
      s.EndsWith(".bmp")) 
     .Select(filePath => new Uri(filePath)) 
     .ToArray(); 
相關問題