Hypothetisch zou het handig zijn om dit te doen:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
waar de GetColumns-methode een andere methode binnen aanroept, afhankelijk van het doorgegeven type.
Ja, ik zou het kunnen doen als een booleaanse vlag of iets dergelijks, ik vroeg me alleen af of er een manier was om dit door te geven, en vroeg toen:
typeof(arg[1]) of vergelijkbaar…
Ik zou de methode ook kunnen negeren, generieke geneesmiddelen gebruiken, enz. – Ik weet dat er verschillende manieren zijn om dit te doen, ik was gewoon benieuwd of dit mogelijk was.
Antwoord 1, autoriteit 100%
Er zijn twee veelvoorkomende benaderingen. Ten eerste kunt u System.Type
doorgeven
object GetColumnValue(string columnName, Type type)
{
// Here, you can check specific types, as needed:
if (type == typeof(int)) { // ...
Dit zou heten als: int val = (int)GetColumnValue(columnName, typeof(int));
De andere optie zou zijn om generieke geneesmiddelen te gebruiken:
T GetColumnValue<T>(string columnName)
{
// If you need the type, you can use typeof(T)...
Dit heeft het voordeel dat het boksen vermijdt en enige typeveiligheid biedt, en zou worden aangeroepen als: int val = GetColumnValue<int>(columnName);
Antwoord 2, autoriteit 10%
foo.GetColumnValues(dm.mainColumn, typeof(string))
U kunt ook een generieke methode gebruiken:
public void GetColumnValues<T>(object mainColumn)
{
GetColumnValues(mainColumn, typeof(T));
}
en je zou het dan als volgt kunnen gebruiken:
foo.GetColumnValues<string>(dm.mainColumn);
Antwoord 3, autoriteit 6%
Je kunt een type als argument doorgeven, maar daarvoor moet je typeof
gebruiken:
foo.GetColumnValues(dm.mainColumn, typeof(int))
De methode zou een parameter van het type Type
moeten accepteren.
waar de GetColumns-methode een andere methode binnen aanroept, afhankelijk van het doorgegeven type.
Als u dit gedrag wilt, moet u het type niet als argument doorgeven, maar in plaats daarvan een typeparameter gebruiken.
foo.GetColumnValues<int>(dm.mainColumn)
Antwoord 4, autoriteit 3%
foo.GetColumnValues(dm.mainColumn, typeof(int));
foo.GetColumnValues(dm.mainColumn, typeof(string));
Of het gebruik van generieke geneesmiddelen:
foo.GetColumnValues<int>(dm.mainColumn);
foo.GetColumnValues<string>(dm.mainColumn);
Antwoord 5
Je kunt dit doen door het gewoon in typeof()
te stoppen
foo.GetColumnValues(typeof(int))
public void GetColumnValues(Type type)
{
//logic
}
Antwoord 6
U kunt een argument van het type Type – iow, pass typeof(int) gebruiken. Je kunt ook generieke geneesmiddelen gebruiken voor een (waarschijnlijk efficiëntere) aanpak.
Antwoord 7
Gebruik generieke typen!
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;
}
}
En noem het zo:
DataExtraction<AdPerformanceRow> extractor = new DataExtraction<AdPerformanceRow>(dates, predicates , cids);