ฉันต้องการทำสิ่งนี้:
myYear = record.GetValueOrNull<int?>("myYear"),
สังเกตเห็นว่า nullable type เป็นพารามิเตอร์ทั่วไป
เนื่องจากGetValueOrNull
ฟังก์ชั่นสามารถคืนค่า null ความพยายามครั้งแรกของฉันคือ:
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : class
{
object columnValue = reader[columnName];
if (!(columnValue is DBNull))
{
return (T)columnValue;
}
return null;
}
แต่ข้อผิดพลาดที่ฉันได้รับตอนนี้คือ:
ประเภท 'int?' ต้องเป็นประเภทอ้างอิงเพื่อใช้เป็นพารามิเตอร์ 'T' ในประเภทหรือวิธีการทั่วไป
ขวา! Nullable<int>
คือstruct
! ดังนั้นฉันจึงพยายามเปลี่ยนข้อ จำกัด ของคลาสเป็นstruct
ข้อ จำกัด (และเนื่องจากผลข้างเคียงไม่สามารถส่งคืนได้null
อีกต่อไป):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
ตอนนี้ได้รับมอบหมาย:
myYear = record.GetValueOrNull<int?>("myYear");
ให้ข้อผิดพลาดต่อไปนี้:
ประเภท 'int?' ต้องเป็นประเภทค่าที่ไม่เป็นโมฆะเพื่อใช้เป็นพารามิเตอร์ 'T' ในประเภทหรือวิธีการทั่วไป
การระบุประเภท nullable เป็นพารามิเตอร์ทั่วไปที่เป็นไปได้ทั้งหมดหรือไม่
IDataRecord
จากDbDataRecord
..