Hipoteticamente, seria útil para mim fazer isso:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
onde o método GetColumns chamará um método diferente dentro, dependendo do tipo passado.
Sim, eu poderia fazê-lo como uma bandeira booleana ou similar, apenas me perguntava se havia uma maneira de talvez passar por isso e depois perguntar:
typeof (arg [1]) ou similar ...
Eu também poderia substituir o método, usar genéricos, etc. - eu sei que existem diferentes maneiras de fazer isso, fiquei curioso para saber se isso era possível.
c#
types
methods
parameters
Mark Mayo
fonte
fonte
foo.GetColumnValues<int>(dm.mainColumn)
pode ser o caminho a percorrer.Respostas:
Existem duas abordagens comuns. Primeiro, você pode passar
System.Type
Isso seria chamado como:
int val = (int)GetColumnValue(columnName, typeof(int));
A outra opção seria usar genéricos:
Isso tem a vantagem de evitar o boxe e fornecer algum tipo de segurança, e seria chamado como:
int val = GetColumnValue<int>(columnName);
fonte
T Foo<T,U>(string arg1, U arg2)
ou semelhanteobject GetColumnValue(string columnName, Type type = object)
? Isso não parece ser bastante a trabalhar para mim, mas seria útil saber.foo.GetColumnValues(dm.mainColumn, typeof(string))
Como alternativa, você pode usar um método genérico:
e você poderia usá-lo como:
fonte
Você pode passar um tipo como argumento, mas para fazer isso, você deve usar
typeof
:O método teria de aceitar um parâmetro com o tipo
Type
.Se você deseja esse comportamento, não deve passar o tipo como argumento, mas sim usar um parâmetro de tipo.
fonte
Ou usando genéricos:
fonte
Você pode fazer isso, apenas envolva-o
typeof()
fonte
Você pode usar um argumento do tipo Type - iow, pass typeof (int). Você também pode usar genéricos para uma abordagem (provavelmente mais eficiente).
fonte
Use tipos genéricos!
E chame assim:
fonte