0

在 forloop 内部和外部创建对象是否有区别..我不确定,但我遇到了一个错误,因为在 forloop 外部声明了 oCategoryDe​​finition:

在 System.Int32.System.IConvertible.ToType(类型类型,IFormatProvider 提供程序)的 System.Convert.DefaultToType(IConvertible 值,类型 targetType,IFormatProvider 提供程序)从“System.Int32”到“xxx.CategoryDe​​finition”的无效转换。在 Service.AddFeatureValues(VINDescription vinDescription, VehicleDescription vehicleDescription) 处的 Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)

>

  for (int i = 0; i < listLength; i++)
    {
        CategoryDefinition oCategoryDefinition = (CategoryDefinition)Convert.ChangeType
         (vehicleDescription.genericEquipment[i].Item, typeof(CategoryDefinition));
        vinDescription.StandardFeature.Add(oCategoryDefinition.category.Value);
    }

CategoryDefinition oCategoryDefinition = new CategoryDefinition();

for (int i = 0; i < listLength; i++)
{
   oCategoryDefinition = (CategoryDefinition)Convert.ChangeType
       (vehicleDescription.genericEquipment[i].Item, typeof(CategoryDefinition));
   vinDescription.StandardFeature.Add(oCategoryDefinition.category.Value);
}

编辑

为问题添加一个角度:以下是引发上述错误的方法:

 private void AddFeatureValues(VINDescription vinDescription, VehicleDescription vehicleDescription)
    {
        GenericEquipment[] genericEquipList = null;

        //To add standard features to the vehicle details list.
        CategoryDefinition oCategoryDefinition =  new CategoryDefinition();

        try
        {
            genericEquipList = vehicleDescription.genericEquipment;

            if (genericEquipList != null)
            {
                //Stores the number of items in generic list.
                int listLength = genericEquipList.Length;

                for (int i = 0; i < listLength; i++)
                {
                    //Casting the object type to CategoryDefinition type.
                    oCategoryDefinition = (CategoryDefinition)Convert.ChangeType(vehicleDescription.genericEquipment[i].Item,
                                            typeof(CategoryDefinition));
                    vinDescription.StandardFeature.Add(oCategoryDefinition.category.Value ?? "N/A");
                }
            }
        }
        catch (Exception ex)
        {  
        }
    }
4

2 回答 2

1

也许尝试以下方法,因为唯一的主要区别是 new 关键字。

CategoryDefinition oCategoryDefinition;

for (int i = 0; i < listLength; i++)
{
   oCategoryDefinition = (CategoryDefinition)Convert.ChangeType
       (vehicleDescription.genericEquipment[i].Item, typeof(CategoryDefinition));
   vinDescription.StandardFeature.Add(oCategoryDefinition.category.Value);
}

但是,演员表例外并没有真正帮助我的主张。

于 2012-09-28T10:45:00.980 回答
0

在第二种情况下,由于扩展的变量范围(例如方法),您仍然可以引用上次迭代后持续的对象,因此使用第一个版本更安全。

但是(取决于框架如何实现创建引用)它可能会导致轻微的性能影响,这在迭代次数变大时很重要。

于 2012-09-28T10:39:41.157 回答