仮説的には、これを行うと便利です。
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
getColumnsメソッドは、渡された型に応じて内部で異なるメソッドを呼び出します。
はい、ブール値のフラグなどとしてそれを行うことができます。これを渡す方法があるかどうか疑問に思って、次に尋ねます:
typeof(arg [1])または同様の...
メソッドをオーバーライドしたり、ジェネリックを使用したりすることもできます-これを行うにはさまざまな方法があることを知っていますが、これが可能かどうか興味がありました
2つの一般的なアプローチがあります。まず、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(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、typeof(int)を渡します。 (おそらくより効率的な)アプローチにジェネリックを使用することもできます。
ジェネリック型を使用してください!
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);