2016-08-11 5 views
0

Ich suchte ziemlich viel, fand aber keine Antwort.Variable Zuweisung, die Referenz aktualisiert?

Das ist, was ich habe:

Wrapper _wrap1; 
Wrapper _wrap2; 

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

    return cachedWrapper; 
} 

Ich bin mir bewusst, dass ‚cachedWrapper‘ eine neue Referenz ist, und entweder keine Auswirkungen auf _wrap1 oder _wrap2 haben.

Ich suche nach einem eleganten Weg, der diese Felder ohne die Notwendigkeit für eine zusätzliche if-Anweisung aktualisieren wird.

Meine Klasse hat viel mehr als nur 2 Wrapper, und ich habe mehr Typen als nur 'Wrapper'.

Dank

+0

initialisieren Sie die Felder, wenn Sie sie erklären:

Aber, um Blorgbeard Kommentar hinzufügen, können Sie ein Wörterbuch verwenden. – Servy

+1

Können Sie auf [C# 7] warten (http://stackoverflow.com/documentation/c%23/1936/c-sharp-7-0-features/19197/ref-return-and-ref-local#t= 201608112135378343854)? – Blorgbeard

+2

Wenn Sie "viel mehr" als 2 Wrapper haben, sollten sie sich vielleicht in einem Wörterbuch befinden, anstatt ein Feld pro Instanz zu haben. – Blorgbeard

Antwort

3

Es gibt keine Möglichkeit, genau das zu tun, was Sie fragen.

using System.Collections.Concurrent; 

ConcurrentDictionary<int, Wrapper> wrapperDictionary; 

public Wrapper GetWrapper(int num) 
{ 
    return wrapperDictionary.GetOrAdd(num, _ => new Wrapper()); 
}