Twój kod - tak jak jest teraz - przeniesie dowolną wartość na poziomie ciągu znaków . To naprawdę złe podejście . Zachodzące konwersje niejawne są w dużym stopniu zależne od ustawień systemu (języka i kultury). Najgorsze jest to, że może to działać świetnie na twoim komputerze podczas testowania, ale w systemie klienta przerywa się dziwnymi wiadomościami. Miłego debugowania :-(
Zmień swój kod w ten sposób
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);
}
Spowoduje to dodanie kolumny - nawet jeśli jest to typ dopuszczający wartość null - z prawidłowym typem danych.
kredyty: Ta odpowiedź mi pomogła
AKTUALIZACJA Jeszcze prostsze
(dzięki Yvesowi M. w komentarzu pod odpowiedzią pod linkiem)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}