Hipotetycznie przydałoby mi się to zrobić:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
gdzie metoda GetColumns wywoła inną metodę w zależności od przekazanego typu.
Tak, mógłbym to zrobić jako flagę logiczną lub coś podobnego, po prostu zastanawiałem się, czy istnieje sposób, aby to przekazać, a następnie zapytałem:
typeof (arg [1]) lub podobny ...
Mógłbym również zastąpić metodę, użyć generycznych itp. - Wiem, że są na to różne sposoby, byłem po prostu ciekawy, czy to możliwe.
c#
types
methods
parameters
Mark Mayo
źródło
źródło
foo.GetColumnValues<int>(dm.mainColumn)
może być drogą do zrobienia.Odpowiedzi:
Istnieją dwa popularne podejścia. Po pierwsze, możesz przejść
System.Type
Nazywa się to następująco:
int val = (int)GetColumnValue(columnName, typeof(int));
Inną opcją byłoby użycie leków generycznych:
Ma to tę zaletę, że pozwala uniknąć boksowania i zapewnia pewien rodzaj bezpieczeństwa, i byłoby nazywane:
int val = GetColumnValue<int>(columnName);
źródło
T Foo<T,U>(string arg1, U arg2)
lub podobnyobject GetColumnValue(string columnName, Type type = object)
? To nie wydaje się działać dla mnie, ale warto wiedzieć.foo.GetColumnValues(dm.mainColumn, typeof(string))
Alternatywnie możesz użyć ogólnej metody:
i możesz wtedy użyć go tak:
źródło
Możesz przekazać typ jako argument, ale aby to zrobić, musisz użyć
typeof
:Metoda musiałaby akceptować parametr z typem
Type
.Jeśli chcesz tego zachowania, nie powinieneś przekazywać typu jako argumentu, ale zamiast tego użyj parametru typu.
źródło
Lub używając typów ogólnych:
źródło
Możesz to zrobić, po prostu zawiń
typeof()
źródło
Możesz użyć argumentu typu Type - iow, przekazać typeof (int). Możesz także użyć leków generycznych, aby uzyskać (prawdopodobnie bardziej wydajne) podejście.
źródło
Używaj typów ogólnych!
I nazwij to tak:
źródło