Hola
tengo este código usando genérico y anulable:parámetro de tipo genérico y la sobrecarga del método anulable
// The first one is for class
public static TResult With<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator)
where TResult : class
where TInput : class
// The second one is for struct (Nullable)
public static TResult With<TInput, TResult>(this Nullable<TInput> o,
Func<TInput, TResult> evaluator)
where TResult : class
where TInput : struct
Tenga en cuenta la restricción TInput, una es la clase, el otro es struct. Luego los uso en:
string s;
int? i;
// ...
s.With(o => "");
i.With(o => ""); // Ambiguos method
Causa un error de Ambiguos. Pero también tengo el otro par:
public static TResult Return<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator, TResult failureValue)
where TInput : class
public static TResult Return<TInput, TResult>(this Nullable<TInput> o,
Func<TInput, TResult> evaluator, TResult failureValue)
where TInput : struct
Ésta se compila correctamente
string s;
int? i;
// ...
s.Return(o => 1, 0);
i.Return(o => i + 1, 0);
me dieron ninguna pista qué esto suceda. El primero parece correcto, pero compila el error. El segundo ('Retorno') debería ser un error si el primero es, pero se compila con éxito. ¿Me he perdido algo?
Al igual que un comentario de estilo, evitaría usar el mismo nombre para un parámetro lambda que para una variable que ya está en el alcance. –
ah bien, que en realidad causa un error de compilación. Simplemente pego y edito el código apresuradamente. –