我试图获得一系列的uri,但是当我创建阵列时,我不知道它的长度。数组长度应该是变量'文件中项目数量的长度。 我知道我可以使用列表来执行此操作,但我想尝试将其简化为单个数组,我需要长度为'文件'
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"));
答案 0 :(得分: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];
顺便提一下,我建议你将多个OR更改为类似下面的内容,这样可以使代码更具可读性:
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();
答案 1 :(得分: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();