2010-03-01 40 views
7

xem xét như sau:Tìm Loại tham số Loại

private T getValue<T>(String attr) 
{ ... } 

Làm thế nào để kiểm tra xem là những gì Loại?

Tôi đã nghĩ đến việc:

if("" is T) // String 
if(1 is T) // Int32 

Có cách nào tốt hơn?

+0

Câu hỏi này hữu ích hơn 'trùng lặp' vì câu hỏi này chỉ hỏi về một điều này, trong khi câu hỏi khác có hành lý bổ sung ảnh hưởng đến nội dung câu trả lời. – DCShannon

Trả lời

16

Có chức năng typeof(T)?

+0

vì vậy nếu (typeof (T) == Type.GetType ("String")) ??? –

+9

nếu (typeof (T) == typeof (String)) nên nhanh hơn – helium

5

Bạn có thể sử dụng chức năng typeof(T)?

Vì vậy, để kiểm tra các chuỗi, làm

if(typeof(T) == typeof(string)) // do something

5

Đây là gần như chắc chắn một lỗ hổng trong việc thiết kế chức năng của bạn nếu bạn cần để có được kiểu của tham số kiểu chung chung; Đây là đối diện của "chung". Do đó, sử dụng quá tải thay thế.

Ngoài ra, Unsliced ​​đã đưa ra câu trả lời đúng xác định loại T.

+0

Tôi cần nó cho mục đích gỡ lỗi. –

+0

Bạn có thể sử dụng nó để xác định xem tham số kiểu là một kiểu giá trị như typeof (T) .IsValueType. – LoBo

+0

@LoBo Chắc chắn, nhưng đó là * không * những gì OP đã yêu cầu, và cho hầu hết (nhưng không phải tất cả) mục đích bạn sẽ sử dụng một ràng buộc ở đây thay vì kiểm tra lúc chạy. –

2

Thực tế, có 2 phương pháp làm điều đó, nếu các lớp học dự kiến ​​xuất phát từ cùng lớp hoặc giao diện hoặc lớp trừu tượng bạn có thể làm easly trong Chữ ký Generic

T GetValue() trong đó T: lớp, điều này sẽ buộc T toàn bộ loại để trở thành loại tham chiếu. Hoặc T GetValue() trong đó T: IDisposable, điều này sẽ buộc toàn bộ T Types thực thi IDisposable.

cho loại trường hợp của bạn (T) sẽ giải quyết vấn đề của bạn, nhưng trong trường hợp này, làm cho phương pháp không chung chung.

Các vấn đề liên quan