我的码具有这样的:

HttpFileCollection files

而不是通过每个文件循环和添加了file.ContentLength获取所有内容的总长度的e.g。

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

有没有一种方法,我可以用一个lambda表达式做到这一点,所以我有这样的事情..

int totalLength = files.[some sort of delegate here to do the addition].

预先感谢。

编辑:?HttpFileCollection具有GetEnumeratorMethod但它需要实现IEnumerable使用lambda表达

有帮助吗?

解决方案

您可以使用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.Core程序,进入System.Linq的命名空间,并打开枚举类定义。您会在这里发现这些方法(在其他地方,我认为)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top