つかさのBlog@hatena

技術系ブログのはず

C#におけるLINQの小ネタ2

下記は仕事中に見かけたソースコードで、改善の余地がある記述です。

修正前ソースコード

if(users.Count(f => f.Age >= 40) > 0)
{
    Console.WriteLine("40歳以上が存在します!");
}

リスト内で条件に合致するデータが、1件でも存在する場合は「Count() > 0」とするより「Any()」としたほうが簡潔に記述できます。
参考:Qiita

修正後ソースコード

if(users.Any(f => f.Age >= 40))
{
    Console.WriteLine("40歳以上が存在します!");
}


自分でも気を抜くとたまにやってしまうので、戒めの意味を込めてブログに掲載。

ソースコード全体

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // テストデータを取得
            List<UserInfo> users = GetTestData();

            // 年齢が40以上のユーザが1人でもいる場合
            if(users.Count(f => f.Age >= 40) > 0)
            {
                Console.WriteLine("40歳以上が存在します!");
            }

            Console.Read();
        }

        /// <summary>
        /// テストデータを取得
        /// </summary>
        /// <returns>テストデータリスト</returns>
        static List<UserInfo> GetTestData()
        {
            List<UserInfo> list = new List<UserInfo>();
            list.Add(new UserInfo() { UserID = "UserA", UserName = "ユーザA", Age = 18 });
            list.Add(new UserInfo() { UserID = "UserB", UserName = "ユーザB", Age = 34 });
            list.Add(new UserInfo() { UserID = "UserC", UserName = "ユーザC", Age = 30 });
            list.Add(new UserInfo() { UserID = "UserD", UserName = "ユーザD", Age = 38 });
            list.Add(new UserInfo() { UserID = "UserE", UserName = "ユーザE", Age = 45 });
            list.Add(new UserInfo() { UserID = "UserF", UserName = "ユーザF", Age = 24 });
            list.Add(new UserInfo() { UserID = "UserG", UserName = "ユーザG", Age = 32 });
            list.Add(new UserInfo() { UserID = "UserH", UserName = "ユーザH", Age = 19 });
            list.Add(new UserInfo() { UserID = "UserI", UserName = "ユーザI", Age = 23 });

            return list;
        }
    }

    /// <summary>
    /// ユーザ情報を保持するクラス
    /// </summary>
    class UserInfo
    {
        /// <summary>
        /// ユーザID
        /// </summary>
        public string UserID { get; set; }

        /// <summary>
        /// ユーザ名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 年齢
        /// </summary>
        public int Age { get; set; }
    }
}


参考

f:id:tsukasa-labz:20180829231254j:plain:w200
C#ショートコードプログラミング 第3版