正确使用Object Initializer

时间:2012-06-26 13:39:44

标签: c#-4.0 initialization

我有一个初始化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中找不到相同的示例。 这种变体是正确的吗?还是黑客攻击?

2 个答案:

答案 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);