C#の拡張メソッドについて 2

Dictionaryから値を取得するときに一旦、受け取り用の変数を用意するというのが面倒なので
自分は下記拡張メソッドをよく使います。

static class MyExtension
{
    /// 
    /// 指定されたキーと値のコレクションから指定されたキーに紐づく値を取得します。
    /// 
    /// 対象のコレクション
    /// 取得したい値のキー
    /// 指定されたキーに紐づく値があった場合は対象の値。それ以外は対象の値の型の規定値
    public static T2 GetValueOrDefault(this Dictionary dictionary, T1 key)
    {

        T2 value;

        if (dictionary.TryGetValue(key, out value))
        {
            return value;
        }

        return default(T2);
    }
}

この場合、下記TestクラスのインスタンスをDictionaryで管理した場合に通常のやり方だと

public class Test {
}

var list1 = new Dictionary();
list1.Add(1, new Test());


// キー1のデータを取得
Test data1;

if (list1.TryGetValue(1, out data1))
{
    //取り出せた場合の処理
}

これがMyExtensionを使ったやり方だと

// キー1のデータを取得
var data1 = list1.GetValueOrDefault(1);

if (data1 != null)
{
    //取り出せた場合の処理
}

となり、行数的には変わりませんが変数宣言と値の代入が同時に行えるのでvarを使用することが出来ます。
※但し、辞書に設定している値が値型の場合はキーが存在しない場合に初期値が返ってくるので、キーが存在していたかどうかの判断はできなくなってしまいます。

おすすめ

TOP
TOP