質問

私のコードは次のようなものを持っています

HttpFileCollection files

の代わりに、すべてのコンテンツの合計の長さを取得するためにfile.ContentLengthを各ファイルをループして合算の例えばます。

        int totalLength = 0;
        for (int i = 0; i < files.Count; i++)
        {
            totalLength += files[i].ContentLength;
        }

私は..

のようなものを持っているので、私はラムダ式でこれを行うことができます方法はあります
int totalLength = files.[some sort of delegate here to do the addition].

事前に感謝します。

編集:?HttpFileCollectionはGetEnumeratorMethodを持っていますが、それは、ラムダ式を使用するためにIEnumerableをを実装する必要があります。

役に立ちましたか?

解決

あなたは、LINQを使用することができます:

int totalLength = files.AllKeys.Select(k => files[k]).Sum(f => f.ContentLength);
残念ながら、HttpFileCollectionの列挙子は、文字列の列挙を返します。実際のオブジェクト(HttpPostedFile)を取得するためには、キーで「辞書」にアクセスする必要があります。 HttpPostedFileの列挙には、この変換列挙子インスタンス(選択を介して)、次いで、コンテンツの長さを合計する。

他のヒント

あなたはこのように、それをキャストする必要があります:

int totalLength = files.Cast<HttpPostedFile>().Sum(f => f.ContentLength);

は確かに、あなたはこれを使用することができ、受け入れ答えに追加するには

int totalLength = files.AllKeys.Select(k => files[k]).Sum(f => f.ContentLength);
和の拡張メソッドは、あなたのためにそれを行うため、

あなたのコードで列挙することはありません理由です。あなたはリフレクターを通してそれを実行する場合は、最終的にこのコードのビットを見つけます:

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;
}
ご覧のとおり、

は、それが本当にrocketscienceではありません。それはほぼ元のコードと同じだとしても!

注:このコードを検索する場合、System.Linqの名前空間に移動し、列挙クラス定義を開き、オープンSystem.Coreをクラック。あなたは(他の場所の中で、私は思う)、ここで、これらの方法を見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top