Передача только типа в качестве параметра в C#
гипотетически это было бы удобно для меня, чтобы сделать это:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
где метод GetColumns будет вызывать другой метод внутри в зависимости от переданного типа.
Да, я мог бы сделать это как логический флаг или аналогичный, мне просто интересно, есть ли способ, возможно, передать это, а затем спросить:
typeof (arg[1]) или аналогичный...
я мог бы также переопределить метод, использовать дженерики и т. д.-Я знаю, что есть разные способы сделать это, я был просто любопытно, возможно ли это.
6 ответов:
есть два общих подхода. Во-первых, вы можете пройти
System.Typeobject GetColumnValue(string columnName, Type type) { // Here, you can check specific types, as needed: if (type == typeof(int)) { // ...это будет называться так:
int val = (int)GetColumnValue(columnName, typeof(int));другой вариант-использовать дженерики:
T GetColumnValue<T>(string columnName) { // If you need the type, you can use typeof(T)...это имеет преимущество избежать бокса и обеспечения некоторого типа безопасности, и будет называться как:
int val = GetColumnValue<int>(columnName);
foo.GetColumnValues(dm.mainColumn, typeof(string))кроме того, вы можете использовать общий метод:
public void GetColumnValues<T>(object mainColumn) { GetColumnValues(mainColumn, typeof(T)); }и вы могли бы использовать его как:
foo.GetColumnValues<string>(dm.mainColumn);
вы можете передать тип в качестве аргумента, но для этого вы должны использовать
typeof:foo.GetColumnValues(dm.mainColumn, typeof(int))метод должен был бы принять параметр с типом
Type.
где метод GetColumns будет вызывать другой метод внутри в зависимости от переданного типа.
если вы хотите такое поведение, то вы не должны передавать тип в качестве аргумента, а вместо этого использовать параметр типа.
foo.GetColumnValues<int>(dm.mainColumn)
foo.GetColumnValues(dm.mainColumn, typeof(int)); foo.GetColumnValues(dm.mainColumn, typeof(string));или с помощью дженериков:
foo.GetColumnValues<int>(dm.mainColumn); foo.GetColumnValues<string>(dm.mainColumn);
Вы можете сделать это, просто оберните его в
typeof()foo.GetColumnValues(typeof(int)) public void GetColumnValues(Type type) { //logic }
вы можете использовать аргумент типа Type-iow, pass typeof(int). Вы также можете использовать дженерики для (возможно, более эффективного) подхода.
Comments