Kode Anda - seperti sekarang - akan mentransfer nilai apa pun pada level string . Ini adalah pendekatan yang sangat buruk . Konversi implisit yang terjadi sangat bergantung pada pengaturan sistem Anda (bahasa dan budaya). Bagian terburuknya adalah:Ini mungkin bekerja dengan sangat baik di mesin Anda saat Anda mengujinya, tetapi pada sistem pelanggan itu rusak dengan pesan aneh. Selamat Debug :-(
Ubah kode Anda seperti ini
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);
}
Ini akan menambahkan kolom - meskipun ini adalah tipe nullable - dengan tipe data yang benar.
kredit: Jawaban ini membantu saya
PERBARUI Lebih sederhana
(terima kasih kepada Yves M. dalam komentar di bawah jawaban yang ditautkan)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}