5

ジェネリック IEnumerable をデータソースとして取得する DataTable を生成するメソッドを作成しています。以下のコードを使用して、値がない場合にフィールドにデフォルト値を設定しようとしています。

private void createTable<T>(IEnumerable<T> MyCollection, DataTable tabela) 
        {
            Type tipo = typeof(T);

            foreach (var item in tipo.GetFields() )
            {
                tabela.Columns.Add(new DataColumn(item.Name, item.FieldType));
            }

            foreach (Pessoa recordOnEnumerable in ListaPessoa.listaPessoas)
            {
                DataRow linha = tabela.NewRow();

                foreach (FieldInfo itemField in tipo.GetFields())
                {
                    Type typeAux = itemField.GetType();

                    linha[itemField.Name] =
                        itemField.GetValue(recordOnEnumerable) ?? default(typeAux); 

                }
            }
        }

このエラーがスローされます:

型または名前空間名 'typeAux' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

なんで?関数「Default(Type)」はその型のデフォルト値を返すべきではありませんか?

4

2 に答える 2

0

このdefaultステートメントは では機能しませんSystem.Type

そうは言っても、それを省略してDBNull直接使用する方が適切なようです:

linha[itemField.Name] = itemField.GetValue(recordOnEnumerable) ?? DBNull.Value;

値がnullである場合、結果をnull( aDataRowではDBNull.Value) に設定するのが適切と思われます。

于 2013-08-21T00:32:25.787 に答える