Secara hipotetis, akan berguna bagi saya untuk melakukan ini:
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)
di mana metode GetColumns akan memanggil metode yang berbeda di dalam tergantung pada jenis yang diteruskan.
Ya, saya bisa melakukannya sebagai bendera boolean atau serupa, saya hanya bertanya-tanya apakah mungkin ada cara untuk melewati ini, dan kemudian bertanya:
typeof (arg [1]) atau serupa ...
Saya juga bisa mengganti metode, menggunakan obat generik, dll - Saya tahu ada berbagai cara untuk melakukan ini, saya hanya ingin tahu apakah ini mungkin.
c#
types
methods
parameters
Mark Mayo
sumber
sumber
foo.GetColumnValues<int>(dm.mainColumn)
mungkin cara untuk pergi.Jawaban:
Ada dua pendekatan umum. Pertama, Anda bisa lewat
System.Type
Ini akan disebut seperti:
int val = (int)GetColumnValue(columnName, typeof(int));
Pilihan lainnya adalah menggunakan obat generik:
Ini memiliki keuntungan untuk menghindari tinju dan memberikan beberapa jenis keamanan, dan akan disebut seperti:
int val = GetColumnValue<int>(columnName);
sumber
T Foo<T,U>(string arg1, U arg2)
atau sejenisnyaobject GetColumnValue(string columnName, Type type = object)
? Tampaknya tidak berhasil bagi saya, tetapi akan berguna untuk mengetahuinya.foo.GetColumnValues(dm.mainColumn, typeof(string))
Alternatifnya, Anda bisa menggunakan metode umum:
dan Anda kemudian dapat menggunakannya seperti:
sumber
Anda dapat mengirimkan tipe sebagai argumen, tetapi untuk melakukannya Anda harus menggunakan
typeof
:Metode tersebut perlu menerima parameter dengan tipe
Type
.Jika Anda menginginkan perilaku ini maka Anda tidak boleh meneruskan tipe sebagai argumen melainkan menggunakan parameter tipe.
sumber
Atau menggunakan obat generik:
sumber
Anda bisa melakukan ini, cukup bungkus
typeof()
sumber
Anda dapat menggunakan argumen tipe Type - iow, pass typeof (int). Anda juga dapat menggunakan obat generik untuk pendekatan (mungkin lebih efisien).
sumber
Gunakan tipe generik!
Dan sebut saja seperti ini:
sumber