que - string[] c# ejemplos
Convierta el valor de la cadena al tipo genérico que sea Guid o int (3)
Tengo un método genérico que convierte una identificación de una cadena (por ejemplo, recuperada del valor de un campo oculto en un formulario ASP.NET) a un tipo de destino y hace algo con ella.
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Convert.ChangeType(rawId, typeof(T));
doSomethingWithId(id);
}
T será Guid o Int32 y el código anterior se cae (en tiempo de ejecución) cuando es Guid, y dice que el lanzamiento de String a Guid no es válido.
Entonces pensé que podría intentar verificar el tipo y, si es Guid, instanciar 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 puede convertirse a tipo T
No estoy muy seguro de cómo solucionar esto. ¿Alguna sugerencia?
Puede intentar algo como esto tal vez:
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Activator.CreateInstance(typeof(T), new object[] { rawId });
doSomethingWithId(id);
}
Si T
será Guid
o Int32
entonces no es realmente muy genérico, ¿verdad? Simplemente escriba dos métodos en su lugar, ya sea con diferentes nombres, o posiblemente sobrecargas. No veo el beneficio en el uso de genéricos aquí, y puede hacer que su código sea más complicado de lo necesario.
el siguiente código funciona bien con la conversión a Guid. revisalo
id = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(text);