È accettabile avere un parametro generico fittizio nell'elenco dei parametri al fine di salvare gli utenti del metodo dalla necessità di specificare argomenti tipo? Ad esempio:
public T Generate<T>(int paramForInstance) where T : MyClass {
return MyClass.SomeFactoryMethod<T>(paramForInstance);
}
//calling code needs to specify type
MyDerivedClass instance = Generate<MyDerivedClass>(5);
public T Generate<T>(int paramForInstance, T dummy) where T : MyClass {
return MyClass.SomeFactoryMethod<T>(paramForInstance);
}
//calling code needs to provide a "sample" to enable type inference
MyDerivedClass instance = null;
instance = Generate(5,instance);
Il presupposto è che se junior altri sviluppatori del team non hanno bisogno di pensare ai generici, hanno meno probabilità di calciare.
A Little Background (sentiti libero di saltare questo passaggio)
Un paio di settimane fa, un tipo di amministratore di gestione del mio team ha dato di matto quando ha visto il codice (il mio codice) che assomigliava a questo:
//conversion methods, using generics
private static TResult? IfNotDangerous<TResult>
(SomeType firstThing, string name, Func<object, TResult?> conversion)
where TResult : struct
{
return IfNotDangerous(firstThing, name,
(any, dummy) => conversion(any), (TResult?)null);
}
private static TResult IfNotDangerous<TResult>
(SomeType firstThing, string name, Func<object, TResult, TResult> conversion,
TResult defaultValue)
{
if (firstThing == null) return defaultValue;
if (!firstThing.Contains(name)) return defaultValue;
if (firstThing[name] == DangerousValue) return defaultValue;
return conversion(firstThing[name], defaultValue);
}
La lamentela che ha avuto è stata: "Perché stai usando una struttura ?! È così pesante in termini di risorse! E cosa significa" dove "significa? Nessuno sullo sviluppo senior sa cosa fa - Ho chiesto a tutti! "
Dopo aver superato la mia autocommiserazione, ho trovato un modo per aggirare che non usava i generici per questo particolare metodo. La pacificazione è stata raggiunta. Ma vorrei evitare problemi in futuro, se possibile.
Modifica
Apprezzo tutto l'incoraggiamento, ma la domanda non era "dovrei cercare altrove il lavoro?" - Era "una soluzione alternativa utilizzabile?"