tôi cần phải viết một loạt các phương pháp chăm 1..N tham số kiểu chung chung, ví dụ:C# generics: bất kỳ cách nào để tham khảo các loại tham số chung chung như một bộ sưu tập?
int Foo<T1>();
int Foo<T1,T2>();
int Foo<T1,T2,T3>();
...
int Foo<T1,T2,T3...TN>();
Bên Foo()
Tôi muốn làm điều gì đó cho từng loại, ví dụ như
int Foo<T1,T2,T3>() {
this.data = new byte[3]; // allocate 1 array slot per type
}
Is có cách nào để tham số hóa thông tin này để tôi không chỉnh sửa mọi biến thể của Foo()
, tương tự như:
int Foo<T1,T2,T3>() {
this.data = new byte[_NUMBER_OF_GENERIC_PARAMETERS];
}
Lý tưởng nhất, tôi cũng muốn để có thể nhận được một mảng hoặc bộ sưu tập các loại cũng như:
int Foo<T1,T2,T3>() {
this.data = new byte[_NUMBER_OF_GENERIC_PARAMETERS];
// can do this
Type [] types = new Type[] { T1, T2, T3 };
// but would rather do this
Type [] types = _ARRAY_OR_COLLECTION_OF_THE_GENERIC_PARAMETERS;
}
Nó không thực sự có ý nghĩa trong ngữ cảnh của hệ thống kiểu C# để có danh sách tham số chung VARdic - làm cách nào bạn tạo một phương thức với các kiểu đó trong chữ ký của nó? Và nếu bạn không bao giờ sử dụng các tham số kiểu trong một chữ ký phương thức, nó sẽ thích hợp hơn khi chỉ sử dụng một tập hợp 'Loại' trực tiếp. (Trừ khi bạn đang cố gắng nắm bắt các kiểu biên dịch của danh sách tham số variadic nhưng điều đó không thực sự hợp lý - danh sách 'params' là một mảng của một kiểu định sẵn.) – millimoose
Hãy xem cái này, http : //stackoverflow.com/questions/44153/can-you-use-reflection-to-find-the-name-of-the-currently-executing-method, tuy nhiên tôi nghi ngờ nó rắc rối hơn nó đáng giá. –
Hãy xem câu trả lời của Jon Skeet tại http://stackoverflow.com/questions/213333/using-c-sharp-params-keyword-in-a-constructor-of-generic-types. Bạn có thể sử dụng từ khóa params, tùy thuộc vào nhu cầu của bạn. – Kirk