假设我这样做很方便:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
其中GetColumns方法将根据传递的类型调用其他方法。
是的,我可以将它作为一个布尔标志或类似的,我只是想知道是否有办法可能通过这个,然后问:
typeof(arg [1])或类似的......
我也可以覆盖该方法,使用泛型等 - 我知道有不同的方法可以做到这一点,我只是好奇这是否可能。
答案 0 :(得分:170)
有两种常见的方法。首先,您可以传递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));
另一种选择是使用泛型:
T GetColumnValue<T>(string columnName)
{
// If you need the type, you can use typeof(T)...
这样做的好处是可以避免装箱并提供某种类型的安全性,并且会被称为:int val = GetColumnValue<int>(columnName);
答案 1 :(得分:16)
foo.GetColumnValues(dm.mainColumn, typeof(string))
或者,您可以使用通用方法:
public void GetColumnValues<T>(object mainColumn)
{
GetColumnValues(mainColumn, typeof(T));
}
然后您就可以使用它了:
foo.GetColumnValues<string>(dm.mainColumn);
答案 2 :(得分:11)
您可以将类型作为参数传递,但为此,您必须使用typeof
:
foo.GetColumnValues(dm.mainColumn, typeof(int))
该方法需要接受类型为Type
的参数。
其中GetColumns方法将根据传递的类型调用其他方法。
如果您想要这种行为,那么您不应该将该类型作为参数传递,而是使用类型参数。
foo.GetColumnValues<int>(dm.mainColumn)
答案 3 :(得分:8)
foo.GetColumnValues(dm.mainColumn, typeof(int));
foo.GetColumnValues(dm.mainColumn, typeof(string));
或使用泛型:
foo.GetColumnValues<int>(dm.mainColumn);
foo.GetColumnValues<string>(dm.mainColumn);
答案 4 :(得分:1)
您可以执行此操作,只需将其包装在typeof()
foo.GetColumnValues(typeof(int))
public void GetColumnValues(Type type)
{
//logic
}
答案 5 :(得分:0)
您可以使用Type - iow类型的参数,传递typeof(int)。您还可以使用泛型(可能更有效)方法。
答案 6 :(得分:0)
使用通用类型!
class DataExtraction<T>
{
DateRangeReport dateRange;
List<Predicate> predicates;
List<string> cids;
public DataExtraction( DateRangeReport dateRange,
List<Predicate> predicates,
List<string> cids)
{
this.dateRange = dateRange;
this.predicates = predicates;
this.cids = cids;
}
}
并这样称呼它:
DataExtraction<AdPerformanceRow> extractor = new DataExtraction<AdPerformanceRow>(dates, predicates , cids);