2012-08-15 9 views
6

Esiste una conversione o un cast incorporato tra KeyValuePair<T1, T2> e Tuple<T1, T2>?Conversione tra Tuple <T1,T2> e KeyValuePair <T1, T2>

So che questo sarebbe un metodo di estensione banale:

public static KeyValuePair<T1, T2> ToPair<T1, T2>(this Tuple<T1, T2> source) 
{ 
    return new KeyValuePair<T1, T2>(source.Item1, source.Item2); 
} 

public static Tuple<T1, T2> ToTuple<T1, T2>(this KeyValuePair<T1, T2> source) 
{ 
    return Tuple.Create(source.Key, source.Value); 
} 

Ma dal momento che gli oggetti possono essere utilizzati per scopi simili (soprattutto perché KeyValuePair<> è stato spesso utilizzato al posto di un 2 elemento Tuple<> fino a quando è aggiunta a C# 4.0), mi stavo chiedendo se un tale convertitore fosse già integrato nel framework?

Motivo che chiedo è che sto lavorando con una vecchia libreria (targeting .NET 3.5) che ha utilizzato KeyValuePair<> in molti posti che una tupla potrebbe essere più appropriata, e voglio usare Tuple<> nel nuovo codice. quindi sto cercando di capire se posso semplicemente trasmettere o convertire i valori di ritorno kvp da questi metodi a Tuple o se devo definire la mia conversione (o modificare il codice precedente).

risposta

6

Non vi è alcuna conversione incorporata nel BCL di cui sono a conoscenza, e non c'è sicuramente alcun cast implicito o esplicito. Dubito che avrebbero mai aggiunto questa conversione perché i tipi sono usati per scopi diversi.

Penso che la tua versione sia soddisfacente.

Problemi correlati