Hipotéticamente sería útil para mí hacer esto:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
donde el método GetColumns llamará a un método diferente dentro dependiendo del tipo pasado.
Sí, podría hacerlo como una bandera booleana o similar, solo me preguntaba si había una forma de pasar esto, y luego preguntar:
typeof (arg [1]) o similar ...
También podría anular el método, usar genéricos, etc. Sé que hay diferentes formas de hacerlo, tenía curiosidad por saber si esto era posible.
c#
types
methods
parameters
Mark Mayo
fuente
fuente
foo.GetColumnValues<int>(dm.mainColumn)
puede ser el camino a seguir.Respuestas:
Hay dos enfoques comunes. Primero, puedes pasar
System.Type
Esto se llamaría así:
int val = (int)GetColumnValue(columnName, typeof(int));
La otra opción sería usar genéricos:
Esto tiene la ventaja de evitar el boxeo y proporcionar algún tipo de seguridad, y se llamaría así:
int val = GetColumnValue<int>(columnName);
fuente
T Foo<T,U>(string arg1, U arg2)
o similarobject GetColumnValue(string columnName, Type type = object)
. Eso no parece funcionar para mí, pero sería útil saberlo.foo.GetColumnValues(dm.mainColumn, typeof(string))
Alternativamente, podría usar un método genérico:
y luego puedes usarlo como:
fuente
Puede pasar un tipo como argumento, pero para hacerlo debe usar
typeof
:El método debería aceptar un parámetro con tipo
Type
.Si desea este comportamiento, no debe pasar el tipo como argumento, sino utilizar un parámetro de tipo.
fuente
O usando genéricos:
fuente
Puedes hacer esto, solo envuélvelo
typeof()
fuente
Puede usar un argumento de tipo Type - iow, pass typeof (int). También puede usar genéricos para un enfoque (probablemente más eficiente).
fuente
¡Usa tipos genéricos!
Y llámalo así:
fuente