आपका कोड - जैसा अभी है - स्ट्रिंग स्तर पर किसी भी मान को स्थानांतरित करेगा . यह एक वास्तव में खराब तरीका है . आपके सिस्टम की सेटिंग (भाषा और संस्कृति) के आधार पर होने वाले निहित रूपांतरण अत्यधिक हैं। सबसे बुरी बात यह है:जब आप इसका परीक्षण कर रहे हों तो यह आपकी मशीन पर बहुत अच्छा काम कर सकता है, लेकिन ग्राहक के सिस्टम पर यह अजीब संदेशों के साथ टूट जाता है। हैप्पी डिबगिंग :-(
अपना कोड इस तरह बदलें
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
dataTable.Columns.Add(prop.Name, prop.PropertyType.GetGenericArguments()[0]);
else
dataTable.Columns.Add(prop.Name, prop.PropertyType);
}
यह कॉलम जोड़ देगा - भले ही यह एक अशक्त प्रकार है - सही डेटा प्रकार के साथ।
क्रेडिट: इस जवाब ने मेरी मदद की
अपडेट और भी आसान
(लिंक किए गए उत्तर के नीचे एक टिप्पणी में यवेस एम के लिए thx)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}