2016-08-11 4 views
0

かなり検索しましたが、答えが見つかりませんでした。参照を更新する変数代入?

これは私が持っているものです。

Wrapper _wrap1; 
Wrapper _wrap2; 

public Wrapper GetWrapper(int num) 
{ 
    Wrapper cachedWrapper = num == 1 ? _wrap1 : _wrap2; 
    if(cachedWrapper == null) 
    { 
     cachedWrapper = new Wrapper(); 
    } 

    return cachedWrapper; 
} 

私は「cachedWrapper」は、新たな基準であることを承知している、と_wrap1または_wrap2のいずれかへの影響はありません。

私は、これらのフィールドを更新するためのエレガントな方法を探しています。if文を追加する必要はありません

私のクラスには2つのラッパー以上のものがたくさんあります。また、「ラッパー」以外のタイプもあります。

おかげ

+0

はフィールドだけを初期化します。 – Servy

+1

[C#7]を待つことができますか(http://stackoverflow.com/documentation/c%23/1936/c-sharp-7-0-features/19197/ref-return-and-ref-local#t= 201608112135378343854)? – Blorgbeard

+2

2つのラッパーよりも「もっとたくさんの」ラップトップがある場合は、おそらくインスタンスごとに1つのフィールドを持つのではなく、辞書に入れる必要があります。 – Blorgbeard

答えて

3

あなたが求めているものを正確に行う方法はありません。

しかし、Blorgbeardのコメントを追加するには、辞書を使用することができます。あなたがそれらを宣言するとき

using System.Collections.Concurrent; 

ConcurrentDictionary<int, Wrapper> wrapperDictionary; 

public Wrapper GetWrapper(int num) 
{ 
    return wrapperDictionary.GetOrAdd(num, _ => new Wrapper()); 
} 
関連する問題