System.RuntimeType
System.Type
เป็นชั้นที่เป็นรูปธรรมที่เกิดขึ้นจากชั้นฐานนามธรรม เนื่องจากไม่ได้เป็นที่สาธารณะที่คุณมักจะพบกรณีมันเป็นSystem.RuntimeType
System.Type
ความสับสนอาจเกิดขึ้นได้เมื่อคุณพยายามหาประเภทของวัตถุและเรียกGetType()
ใช้วัตถุอื่นที่แสดงประเภทของวัตถุแรกโดยไม่ถูกต้องแทนที่จะใช้วัตถุนั้นโดยตรง จากนั้นType.ToString()
จะกลับมา"System.RuntimeType"
เมื่อวัตถุถูกเรียกใช้เป็นตัวแทนประเภท:
string str = string.Empty;
Type strType = str.GetType();
Type strTypeType = strType.GetType();
strType.ToString();
strTypeType.ToString();
ตัวอย่างเช่นในบล็อกโพสต์นี้มีคนพยายามหาประเภทของคอลัมน์ในฐานข้อมูลโดยทำสิ่งนี้:
object val = reader.GetFieldType(index);
Type runtimeType = val.GetType();
PropertyInfo propInfo = runtimeType.GetProperty("UnderlyingSystemType");
Type type = (Type)propInfo.GetValue(val, null);
เนื่องจาก val เป็นอ็อบเจ็กต์ Type อยู่แล้ว val.GetType () จะส่งคืนอ็อบเจ็กต์ Type อื่นที่แสดงประเภทSystem.RuntimeTime
เนื่องจากเป็นชนิดคอนกรีตที่ใช้แทนอ็อบเจ็กต์ประเภทดั้งเดิม จากนั้นบล็อกโพสต์จะแสดงกลอุบายการสะท้อนที่ไม่จำเป็นเพื่อให้ได้ประเภทของวัตถุประเภทดั้งเดิมเมื่อสิ่งที่ต้องการจริงๆคือ:
Type type = reader.GetFieldType(index) as Type;
ดังนั้นหากคุณ Type
ออบเจ็กต์กำลังรายงานว่ามันแสดงถึง a System.RuntimeType
ตรวจสอบให้แน่ใจว่าคุณไม่ได้เรียกGetType()
ประเภทที่คุณมีอยู่แล้วโดยไม่ได้ตั้งใจ