Uw code - zoals deze nu is - zal elke waarde op tekenreeksniveau overdragen . Dit is een heel slechte benadering . De impliciete conversies die plaatsvinden zijn sterk afhankelijk van de instellingen van uw systeem (taal en cultuur). Het ergste is:dit zou allemaal geweldig kunnen werken op uw machine terwijl u het test, maar op het systeem van een klant breekt het met vreemde berichten. Veel plezier met debuggen :-(
Verander je code als volgt
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);
}
Dit zal de kolom toevoegen - zelfs als dit een nullable type is - met het juiste datatype.
tegoeden: Dit antwoord heeft me geholpen
UPDATE Nog eenvoudiger
(thx aan Yves M. in een reactie onder het gelinkte antwoord)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}