在C#中只传入一个types作为参数

假设这样做对我来说很方便:

foo.GetColumnValues(dm.mainColumn, int) foo.GetColumnValues(dm.mainColumn, string) 

GetColumns方法将根据传递的types调用不同的方法。

是的,我可以做一个布尔标志或类似的,我只是想知道是否有办法或许通过这个,然后问:

typeof(arg [1])或类似的…

我也可以重写方法,使用generics等 – 我知道有不同的方法来做到这一点,我只是好奇,如果这是可能的。

有两种常用的方法。 首先,你可以传递System.Type

 object GetColumnValue(string columnName, Type type) { // Here, you can check specific types, as needed: if (type == typeof(int)) { // ... 

这将被称为像int val = (int)GetColumnValue(columnName, typeof(int));

另一种select是使用generics:

 T GetColumnValue<T>(string columnName) { // If you need the type, you can use typeof(T)... 

这有避免拳击和提供一些types安全的优势,并将被称为像这样: 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); 

您可以传递一个types作为参数,但要这样做,您必须使用typeof

 foo.GetColumnValues(dm.mainColumn, typeof(int)) 

该方法需要接受types为Type的参数。


GetColumns方法将根据传递的types调用不同的方法。

如果你想要这种行为,那么你不应该将types作为parameter passing,而应该使用types参数。

 foo.GetColumnValues<int>(dm.mainColumn) 
 foo.GetColumnValues(dm.mainColumn, typeof(int)); foo.GetColumnValues(dm.mainColumn, typeof(string)); 

或者使用generics:

 foo.GetColumnValues<int>(dm.mainColumn); foo.GetColumnValues<string>(dm.mainColumn); 

你可以做到这一点,只是把它包装在typeof()

 foo.GetColumnValues(typeof(int)) public void GetColumnValues(Type type) { //logic } 

您可以使用Type – Iowtypes的参数,传递typeof(int)。 您也可以使用generics(可能更有效)的方法。