Гипотетически мне было бы удобно это сделать:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
где метод GetColumns будет вызывать другой метод внутри в зависимости от переданного типа.
Да, я мог бы сделать это как логический флаг или что-то подобное, я просто подумал, есть ли способ передать это, а затем спросить:
typeof (arg [1]) или подобное ...
Я также мог переопределить метод, использовать дженерики и т. Д. - Я знаю, что есть разные способы сделать это, мне просто было любопытно, возможно ли это.
c#
types
methods
parameters
Марк Мэйо
источник
источник
foo.GetColumnValues<int>(dm.mainColumn)
может быть путь.Ответы:
Есть два общих подхода. Сначала вы можете пройти
System.Type
Это будет называться так:
int val = (int)GetColumnValue(columnName, typeof(int));
Другой вариант - использовать дженерики:
Это имеет то преимущество, что позволяет избежать упаковки и обеспечить некоторую безопасность типов, и будет называться так:
int val = GetColumnValue<int>(columnName);
источник
T Foo<T,U>(string arg1, U arg2)
или аналогичныйobject GetColumnValue(string columnName, Type type = object)
? Это не совсем подходит для меня, но было бы полезно знать.foo.GetColumnValues(dm.mainColumn, typeof(string))
В качестве альтернативы вы можете использовать общий метод:
и затем вы могли бы использовать его так:
источник
Вы можете передать тип в качестве аргумента, но для этого вы должны использовать
typeof
:Метод должен принять параметр с типом
Type
.Если вам нужно такое поведение, вам не следует передавать тип в качестве аргумента, а вместо этого использовать параметр типа.
источник
Или используя дженерики:
источник
Вы можете сделать это, просто заверните его в
typeof()
источник
Вы можете использовать аргумент типа Type - iow, передать typeof (int). Вы также можете использовать дженерики для (возможно, более эффективного) подхода.
источник
Используйте универсальные типы!
И назовите это так:
источник