Domanda

Solo un pensiero.

Non sarebbe utile avere parametri di tipo opzionali in C #?

Questo renderebbe la vita più semplice. Sono stanco di avere più classi con lo stesso nome, ma diversi parametri di tipo. Inoltre VS non supporta questo molto Vell (nomi di file): -)

Questo sarebbe per esempio eliminare la necessità di una non generica IEnumerable

interface IEnumerable<out T=object>{
  IEnumerator<T> GetEnumerator()
}

Cosa ne pensi?

È stato utile?

Soluzione

Sono sicuramente per questo.

Attualmente sto scrivendo metodi di supporto per i diversi scenari in cui voglio passare i riferimenti a diversi membri e metodi di classi. Per fare questo sto prendendo, ad esempio, un Expression<Func<TIn, TOut>> come argomento per l'helper (che mi permette di raggiungere il metodo con un'espressione lambda, mantenendo così tutto fortemente tipizzato).

MA - Io attualmente bisogno di definire un nuovo metodo di supporto per ogni diverso numero di argomenti di input, dal momento che ho bisogno di avere una diversa quantità di argomenti generici ad esso. Invece di

HelperMethod<TIn>(Expression<Action<TIn>> arg) // Yes, C# can distinguish
HelperMethod<TOut>(Expression<Func<TOut>> arg) // these two from eachother
HelperMethod<TIn, TOut>(Expression<Func<TIn, TOut>> arg)
HelperMethod<TIn1, TIn2, TOut>(Expression<Func<TIn1, TIn2, TOut>> arg)
// etc

ho potuto fare che fare con, al massimo, due metodi:

HelperMethod<TIn>(Expression<Action<TIn>> arg)
HelperMethod<TOut, TIn1 = DummyType, ...>(Expression<Func<TIn1, ..., TOut> arg)

Nel mio caso, sarebbe evitare un sacco di duplicazione del codice ...

Altri suggerimenti

Quale sarebbe l'uso principale per questa caratteristica del linguaggio? Vedo che potrebbe aiutare con alcuni compiti amministrativi, come i nomi dei file e meno dattilografia e tale, ma al di là che io non vedo come questo sarebbe utile.

Inoltre, questa funzione complicherebbe notevolmente eventuali vincoli generici che potrebbero essere immesse sul parametro di tipo generico e il tipo predefinito si avrebbe dovuto funzionare come una sorta di vincolo generico stessa.

Credo che questo complicherebbe la lingua senza offrire un reale beneficio per lo sviluppatore.

Non è chiaro per me che cosa esattamente si sta proponendo. Attualmente ci possono essere i tipi con lo stesso nome, ma diversi parametri di tipo, ma che non sono collegati in alcun modo per eredità -? Quale sarebbe la vostra proposta fare allora

Inoltre, se la libreria di classi di base sono stati riprogettato da zero, c'è quasi certamente non sarebbe interfaccia IEnumerable non generico - esiste solo perché il CLR non supportava i generici quando è stato introdotto l'interfaccia, e l'interfaccia generica eredita da esso solo in modo che il codice legacy continuerà a funzionare. classi di recente dichiarati sono stati creati per un CLR che fa generici di supporto, in modo tale questione non è più rilevante.

Recentemente ho sono imbattuto in un caso che avrebbe potuto usare qualcosa di simile, ma non abbastanza. Ho avuto un metodo che esegue una trasformazione di specie, tra classe A e la classe associata AChild e categoria B e classe BChild. Di solito, la coppia A / AChild era lo stesso di B / BChild, ma a volte A era una classe base B e AChild una classe base di BChild.

Sarebbe stato bello essere in grado di dire che il mio parametro di tipo TB default di TA, e che TBChild default a TAChild.

Si noti che questa era una situazione in cui è stato necessario scrivere i parametri di tipo, come l'inferenza non avrebbe funzionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top