una que programacion por longitud leer extraer ejemplos caracteres caracter cadena c# asp.net generics casting

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);