【发布时间】:2012-09-28 10:29:28
【问题描述】:
在for循环内部和外部创建对象是否有区别..我不确定,但我遇到了在forloop外部声明oCategoryDefinition的错误:
从“System.Int32”到“xxx.CategoryDefinition”的无效转换 在 System.Convert.DefaultToType(IConvertible 值,类型 targetType,IFormatProvider 提供程序) 在 System.Int32.System.IConvertible.ToType(Type type, IFormatProvider provider) 在 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) 在 Service.AddFeatureValues(VINDescription vinDescription, VehicleDescription vehicleDescription)
>
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)
{
}
}
【问题讨论】:
-
在循环内外创建它的唯一区别是对象/变量范围
-
您能否详细说明错误消息与您的代码有何关系?
-
我无法理解其余的问题/问题。请修复它
-
@Johan 除了作用域之外,还有更多的区别——堆分配。但无论如何,这不会是异常的原因。
-
抱歉不清楚...我已经编辑了问题..再次道歉..