3

これはかなり些細なことですが、人々の意見を聞いてみたいと思います。

プロパティを介してアクセスする辞書がある場合、これらの形式のどれをプロパティに使用しますか?

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

これはおそらくそれを行うための典型的な方法です。かなり効率的で、理解しやすいなどです。唯一の欠点は、キーのスペルを間違えたり、1つのインスタンスなどを変更したりする可能性があるため、キーが長くなったり複雑になったりすることです。

/// <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

7 に答える 7

4

コード内のマジックストリング/数字を回避することは良いことなので、私は2番目のものが純粋に好きです。IMOコードで数値または文字列リテラルを複数回参照する必要がある場合は、定数である必要があります。ほとんどの場合、一度だけ使用したとしても、一定である必要があります

于 2008-09-04T16:18:09.977 に答える
1

@Glenn の純粋にこだわりのある観点に同意します。答えは、あなたに合ったものです。このコードはすべて 10 行で実行されます (最後の中括弧を省略した場合)。誰も道に迷うことはなく、タイプミスの可能性はほとんどありません (不可能ではありませんが、非常にわずかです)。一方、キーを別の場所で使用した場合は、間違いなく定数を使用してください。

個人的には、あなたの中かっこのスタイルについてあなたに言いたいです。:) 冗談だ!それは本当にスタイルの問題です。

于 2008-09-04T16:25:32.330 に答える
0

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

詳細については、MSDNとこの質問を参照してください。

于 2008-09-04T16:29:42.100 に答える
0

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

2番目のオプションは、面倒になりすぎます。

于 2008-09-04T16:31:39.850 に答える
0

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

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

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

これには、すべてのプロパティの実装が同一になるという追加の利点があるため、必要に応じてビジュアル スタジオでコード スニペットとして設定できます。

于 2008-09-04T16:35:58.763 に答える
0

あなたのように、魔法の糸を 1 つのコンテキストでのみ使用する場合は、問題ないと思います。
ただし、クラスの別の部分でキーを使用する必要がある場合は、const.

于 2008-09-04T16:38:25.543 に答える
0

@Joel StackFrameに頼りたくない。 インラインは、予期しないときに 1 日を台無しにする可能性があります。

しかし、質問に対して:どちらの方法でも、それほど重要ではありません。

于 2008-09-04T17:25:36.867 に答える