0

for loop の内側と外側でオブジェクトを作成することに違いはありますか..よくわかりませんが、 forloop の外側で宣言されている oCategoryDe​​finition でエラーが発生しています:

System.Int32.System.IConvertible.ToType(Type タイプ、IFormatProvider プロバイダー) の System.Convert.DefaultToType(IConvertible 値、Type targetType、IFormatProvider プロバイダー) での 'System.Int32' から 'xxx.CategoryDe​​finition' へのキャストが無効です。 Convert.ChangeType(オブジェクト値、型変換タイプ、IFormatProvider プロバイダー) 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);
}

編集

問題に1つの角度を追加するには:以下は、上記のエラーを発生させているメソッドです:

 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

2 番目のケースでは、拡張された変数スコープ (メソッドなど) により、最後の反復の後に存続したオブジェクトを引き続き参照できるため、最初のバージョンを使用する方が安全です。

ただし、(フレームワークが参照の作成を実装する方法に応じて) パフォーマンスにわずかな影響を与える可能性があります。これは、反復回数が大きくなると重大になります。

于 2012-09-28T10:39:41.157 に答える