Váš kód – jak je nyní – přenese jakoukoli hodnotu na úrovni řetězce . Toto je opravdu špatný přístup . Probíhající implicitní převody do značné míry závisí na nastavení vašeho systému (jazyk a kultura). Nejhorší na tom je:Na vašem počítači to může fungovat skvěle, když jej testujete, ale v systému zákazníka se to rozbije s podivnými zprávami. Šťastné ladění :-(
Změňte svůj kód takto
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);
}
Tím přidáte sloupec – i když se jedná o typ s možnou hodnotou Null – se správným datovým typem.
kredity: Tato odpověď mi pomohla
AKTUALIZACE Ještě jednodušší
(díky Yvesi M. v komentáři pod odkazovanou odpovědí)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}