Tengo un método genérico que convierte una identificación de una cadena (por ejemplo, recuperada del valor de un HiddenField en un formulario ASP.NET) en un destino escriba y haga algo con eso.Convertir valor de la cadena al tipo genérico que es Guid o int
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Convert.ChangeType(rawId, typeof(T));
doSomethingWithId(id);
}
T será un GUID o Int32 y el código anterior se cae (en tiempo de ejecución) cuando es Guid, diciendo que el elenco de String a Guid es válido.
Entonces pensé que podría tratar de comprobar el tipo y si Guid, una instancia de un nuevo GUID:
var id = default(T);
if (id is Guid)
id = new Guid(rawId);
else
id = (T)Convert.ChangeType(rawId, typeof(T));
ahora esto da un error (en tiempo de compilación) que Guid no se puede convertir a tipo T
No estoy seguro de cómo evitar esto. ¿Alguna sugerencia?
Tienes razón, pero esto es un poco de un ejemplo inventado, hay más a ese método y lo hace de simplificar las cosas en el contexto más amplio de lo que yo 'Estoy haciendo. –
@Veli: Por eso vale la pena tener cuidado al escribir una pregunta y dar una imagen representativa. Todavía consideraría dividirlo en dos métodos públicos no genéricos que podrían usar un método privado genérico común como * parte * de la implementación. –