あなたのコードは、現在のように、文字列レベルで値を転送します .これは本当に悪いアプローチです .行われる暗黙的な変換は、システムの設定 (言語と文化) に大きく依存します。最悪の部分は次のとおりです。これは、テスト中はマシンで問題なく動作する可能性がありますが、顧客のシステムでは奇妙なメッセージで中断されます。楽しいデバッグ:-(
このようにコードを変更してください
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);
}
これにより、列が null 許容型であっても、正しいデータ型で追加されます。
クレジット: この回答が役に立ちました
UPDATE さらにシンプルに
(リンクされた回答の下のコメントでYves M.にthx)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}