在 C # 中只传递一个类型作为参数

假设我这么做会很方便:

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

其中 GetColumns 方法将根据传递的类型调用内部的另一个方法。

是的,我可以把它作为一个布尔标志或类似的东西,我只是想知道是否有一种方法也许可以通过这个,然后问:

类型(arg [1])或类似的..。

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

257787 次浏览

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)

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

foo.GetColumnValues(typeof(int))


public void GetColumnValues(Type type)
{
//logic
}

可以使用 Type-iow 类型的参数,传递 typeof (int)。您还可以使用泛型来实现(可能更有效的)方法。

有两种常见的方法。首先,您可以传递 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);

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

或者使用非专利药:

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

使用通用类型!

  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);