我有一个初始化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中找不到相同的示例。 这种变体是正确的吗?还是黑客攻击?
答案 0 :(得分:0)
肯定有用,是的。它相当于:
DbRecordData tmp = new DbRecordData(2);
tmp.Add("VehMarkName", SqlDbType.NVarChar, vehMarkName);
tmp.Add("refVehTypeId", SqlDbType.Int, refVehTypeId);
DbRecordData dbRecord = tmp;
如果那基本上是你已经写过的代码,那么我更喜欢你的对象初始化版本。如果你想要不同的代码,那么你可能想重新思考一下。
答案 1 :(得分:-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);