Din kode - som den er nu - vil overføre enhver værdi på strengniveau . Dette er en rigtig dårlig tilgang . De implicitte konverteringer, der finder sted, afhænger i høj grad af dit systems indstillinger (sprog og kultur). Det værste er:Dette fungerer måske helt fantastisk på din maskine, mens du tester det, men på en kundes system bryder det med mærkelige beskeder. God fejlfinding :-(
Skift din kode på denne måde
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);
}
Dette vil tilføje kolonnen - selvom dette er en nullbar type - med den korrekte datatype.
kreditter: Dette svar hjalp mig
OPDATERING Endnu enklere
(thx til Yves M. i en kommentar under det linkede svar)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}