1

DbRecordData を初期化するためのバリアントがあります

public class DbRecordData : IList<DbFieldValue>, ICollection<DbFieldValue>, IEnumerable<DbFieldValue>, IEnumerable
{
    public DbRecordData(DataRow row);
    public DbRecordData(int countValues);

    public int Count { get; }

    public DbFieldValue this[int index] { get; set; }

    public int Add(DbFieldValue item);
    public int Add(string fieldName, object value);
    public int Add(DataRow row, string fieldName, SqlDbType dataType);
    public int Add(string fieldName, SqlDbType dataType, object value);
    public void Clear();
    public void FillSqlParameters(SqlParameter[] parameters, int fromIndex);
} 

これは初期化中です:

 DbRecordData dbRecord = new DbRecordData(2)
                        {
                            {"VehMarkName", SqlDbType.NVarChar, vehMarkName},
                            {"refVehTypeId", SqlDbType.Int, refVehTypeId}
                        };    

これは機能し、警告は作成されませんが、msdn で同じ例が見つかりませんでした。この変種は正しいですか?それともハックですか?

4

2 に答える 2

0

それは確かに機能します、はい。これは以下と同等です:

DbRecordData tmp = new DbRecordData(2);
tmp.Add("VehMarkName", SqlDbType.NVarChar, vehMarkName);
tmp.Add("refVehTypeId", SqlDbType.Int, refVehTypeId);
DbRecordData dbRecord = tmp;

それが基本的に別の方法で作成したコードである場合は、オブジェクト初期化子のバージョンを使用したいと思います。それとは異なるコードが必要な場合は、再考する必要があります。

于 2012-06-26T13:42:01.197 に答える
-1

動作しますが、MSDN には記載されていません: http://msdn.microsoft.com/en-us/library/bb384062.aspx

ドキュメント化されていない機能を使用することは、エンタープライズ コードでは正しくありません。この構造のサポートは、最新バージョンの .NET では壊れている可能性があるためです。

文書化された方法は

DbRecordData dbRecord = new DbRecordData(2)
                        {
                            new DbFieldValue("VehMarkName", SqlDbType.NVarChar, vehMarkName),
                            new DbFieldValue("refVehTypeId", SqlDbType.Int, refVehTypeId)
                        };  

しかし、このバージョンはただより複雑です

DbRecordData dbRecord = new DbRecordData(2)
dbRecord.Add("VehMarkName", SqlDbType.NVarChar, vehMarkName);
dbRecord.Add("refVehTypeId", SqlDbType.Int, refVehTypeId);
于 2012-06-26T14:18:49.993 に答える