类型转换和foreach

时间:2012-02-28 21:08:49

标签: c#

我很好奇这个程序是否可以以更加优雅和清洁的方式取得成功?

        foreach (MediaTitle item in mediaTitleCollection)
        {
            if (item is FilmMedia)
            {
                FilmMedia tempItem = (FilmMedia) item;
                sum += tempItem.Playtime;
            }
        }

提前致谢。

3 个答案:

答案 0 :(得分:14)

var sum = mediaTitleCollection.OfType<FilmMedia>().Sum(x => x.Playtime);

答案 1 :(得分:5)

您可以使用OfType<T>进行类型检查和强制转换(仅过滤到FilmMedia类型的元素),然后根据PlayTime属性计算总和:

sum = mediaTitleCollection.OfType<FilmMedia>()
                          .Select(x=> x.Playtime)
                          .Sum();

答案 2 :(得分:4)

非LINQ:

    foreach (MediaTitle item in mediaTitleCollection)
    {
        FilmMedia tempItem = item as FilmMedia;
        if (tempItem != null)
        {
            sum += tempItem.Playtime;
        }
    }