OK per rendere un metodo generico solo per passare in un System.Type?

3

A volte ho una funzione che accetta un parametro System.Type , come:

public void Foo(Type type) {
    // do something with "type"
    ...
}

Questo deve essere chiamato così:

Foo(typeof(MyType));

Vorrei riscriverlo in questo modo:

public void Foo<T>() {
    var type = typeof(T);
    // do something with "type"
    ...
}

In questo modo, i miei chiamanti non devono specificare l'operatore "typeof" ogni volta che chiamano il mio metodo:

Foo<MyType>();

È OK o è un abuso di tipi generici?

    
posta JoelFan 15.12.2014 - 17:37
fonte

1 risposta

7

Non direi che è un abuso . È certamente qualcosa che puoi fare con i generici e a volte rende il tuo codice più pulito. Ecco le avvertenze:

  1. Anche se è molto facile passare da generico a Type è molto difficile fare il contrario. Se è probabile che il tuo chiamante abbia una variabile Type invece di chiamare il tuo materiale con un tipo esplicito ... forse riconsiderare.
  2. Dovrebbe essere estremamente raro lavorare con Type s direttamente, poiché la riflessione è spesso l'unica cosa utile che puoi fare con loro - e dovresti evitare l'uso della riflessione. Considera se veramente hai bisogno del Type o se stai facendo qualcosa di sporco per causare quel requisito in primo luogo.
risposta data 15.12.2014 - 17:41
fonte

Leggi altre domande sui tag