2008-09-04 13 views
3

これはかなり簡単なことですが、私は人々の意見を聞くことが好奇妙です。プロパティを使用して辞書のKey-Valueペアを参照する最良の方法

私はプロパティを介してアクセスするディクショナリを持っていますが、これらの形式のうちどれをプロパティに使用しますか?

/// <summary> 
/// This class's FirstProperty property 
/// </summary> 
[DefaultValue("myValue")] 
public string FirstProperty { 
    get { 
     return Dictionary["myKey"]; 
    } 
    set { 
     Dictionary["myKey"] = value; 
    } 

これは一般的な方法です。これは、唯一の欠点は、これに私をリードし、それのスペルを間違えたり唯一のインスタンスまたは何かを変更することが可能であろう長いまたはより複雑なキーであるなど、かなり、効率的に理解するのは簡単です:

/// <summary> 
/// This class's SecondProperty property 
/// </summary> 
[DefaultValue("myValue")] 
private const string DICT_MYKEY = "myKey" 
public string SecondProperty { 
    get { 
     return Dictionary[DICT_MYKEY]; 
    } 
    set { 
     Dictionary[DICT_MYKEY] = value; 
    } 

はどれ少し複雑ですが、追加の安全性を提供するようであり、私が「コードコンプリート」ソリューションと考えるものに近いです。欠点は、プロパティの上に///ブロックと[DefaultValue()]ブロックが既にある場合、そこに少し混み合ってしまうことです。

あなたはどんな方がいいですか、なぜですか?誰か良いアイデアはありますか?

答えて

4

コード内の魔法の文字列/数字の回避が良いことであるため、私は2番目のものを純粋に好きです。 IMOコード内の数値または文字列リテラルを複数回参照する必要がある場合は、定数でなければなりません。ほとんどの場合、一度だけ使用されても定数でなければならない

1

私は純粋にニーピキの観点から@Glennに同意します。答えはあなたのために何でもできます。このコードはすべて10行で行われます(省略された最後の中括弧が含まれている場合)。誰も失われることはなく、ミスタイピングの可能性はかなりスリムです(不可能ではありませんが、非常にスリムです)。一方、他の場所でキーを使用した場合は、定数をそのまま使用します。

個人的に、私はあなたの中括弧のスタイルについてあなたに行きます。 :) 冗談だ!それは本当にスタイルの問題です。

0

これはあなたの質問に答えるものではありませんが、「DefaultValue」とはあなたが考えるとは思わないと思います。プロパティーのデフォルト値は設定されません。

詳細については、MSDNおよびthis questionを参照してください。

0

複数の値が定数にリファクタリングされる必要があるため、多くの人が2番目のオプションが「正しい」と主張するでしょう。私は、おそらく最初のオプションを使用します。ディクショナリエントリを強力な型付きのプロパティにカプセル化することで、すでに「コードコンプリート」ソリューションに近づいています。これにより、実装で間違ったディクショナリエントリを検索することが難しくなります。 getterとsetterに "myKey"と入力するのがうまくできない場所は2つしかありません。これは見つけるのが非常に簡単です。

2番目のオプションはちょっと面倒すぎるでしょう。

0

キーまでのプロパティ名を照合し、リフレクションを使用してルックアップの名前を取得できます。

public string FirstProperty { 
get { 
    return Dictionary[PropertyName()]; 
} 
set { 
    Dictionary[PropertyName()] = value; 
} 

private string PropertyName() 
{ 
    return new StackFrame(1).GetMethod().Name.Substring(4); 
} 

これは、すべてのプロパティの実装が同じ作りの付加的な利点を持っているので、あなたがしたい場合は、コードスニペットなどVisual Studioでそれらを設定することができます。

0

魔法の文字列を1つのコンテキストで使用する場合は、そうであるように、私はそれが問題ないと思います。
しかし、クラスの別の部分でキーを使用する必要がある場合は、constに行ってください。

0

@JoeelあなたはStackFrameでカウントしたくありません。 In-liningあなたが少なくともそれを期待してあなたの日を台無しにすることができます。

しかし、質問には:どちらの方法も本当に大事なことではありません。

関連する問題