Berechnen Gesamtgehalt Länge von HttpFileCollection mit Lambda-Ausdrücke
-
24-09-2019 - |
Frage
Mein Code hat so etwas wie folgt aus:
HttpFileCollection files
Statt durch jede Datei Looping und die file.ContentLength Hinzufügen von bis zu die Gesamtlänge aller Inhalte z zu erhalten.
int totalLength = 0;
for (int i = 0; i < files.Count; i++)
{
totalLength += files[i].ContentLength;
}
Gibt es eine Weise, die ich dies mit einem Lambda-Ausdruck tun können, so dass ich so etwas wie habe ..
int totalLength = files.[some sort of delegate here to do the addition].
Vielen Dank im Voraus.
Edit:? HttpFileCollection eine GetEnumeratorMethod hat aber würde es brauchen IEnumerable zu implementieren einen Lambda-Ausdruck zu verwenden,
Lösung
Sie können LINQ verwenden:
int totalLength = files.AllKeys.Select(k => files[k]).Sum(f => f.ContentLength);
Leider HttpFileCollection der Enumerator gibt eine Aufzählung von Strings. Um die eigentlichen Objekte (HttpPostedFile) zu bekommen, müssen Sie mit dem Schlüssel das „Wörterbuch“ zuzugreifen. Dieser wandelt der Enumerator auf eine Aufzählung von HttpPostedFile Instanzen (via Select), summiert dann die Inhaltslänge.
Andere Tipps
Sie müssen es werfen, wie folgt aus:
int totalLength = files.Cast<HttpPostedFile>().Sum(f => f.ContentLength);
auf die akzeptierte Antwort hinzuzufügen, in der Tat, können Sie diese verwenden:
int totalLength = files.AllKeys.Select(k => files[k]).Sum(f => f.ContentLength);
Der Grund, warum Sie nicht in Ihrem Code aufzuzählen ist, weil die Sum-Extension-Methode, die für Sie tut. Wenn Sie es durch Reflektor laufen schließlich Sie dieses Stück Code finden:
public static int Sum(this IEnumerable<int> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
int num = 0;
foreach (int num2 in source)
{
num += num2;
}
return num;
}
Wie Sie sehen, ist es nicht wirklich Rocketscience. Es ist fast die gleiche wie Ihr Original-Code selbst!
Hinweis: Wenn Sie diesen Code finden wollen, knacken System.Core, gehen Sie zum System.Linq Namespace und öffnen Sie die Enumerable Klassendefinition. Sie finden diese Methoden finden Sie hier (unter anderem glaube ich).