Member 13823448 Ответов: 2

Оператор Foreach не может работать с переменными типа "object", поскольку "object" не содержит открытого определения для " getenumerator


Привет сэр, у меня есть один класс, в котором у меня есть 4 массива в каждом массиве у меня есть параметры, поэтому я попытался назначить параметры в списке массивов, используя for-each цикл, но я получил эту ошибку, поэтому, пожалуйста, помогите мне.

Что я уже пробовал:

Это мой основной класс:
-----------------------
public class BookRequest
{
        public string EndUserIp { get; set; }
        public string TokenId { get; set; }
        public string TraceId { get;set; }
        public int ResultIndex { get; set; }
        public string HotelCode { get; set; }
        public string HotelName { get; set; }
        public string GuestNationality { get; set; }
        public int NoOfRooms { get; set; }
        public string ClientReferenceNo { get; set; }
        public Boolean IsVoucherBooking { get; set; }
        public List<hotelroomsdetails> RoomInfo { get; set; }
        public int RoomIndex { get; set; }
        public string RatePlanCode { get; set; }
        public string RoomTypeCode { get; set; }
        public string RoomTypeName { get; set; }
        public List<bedtypes> bedtype { get; set; }
        public string SmokingPreference { get; set; }
        public List<string> Supplements { get; set; }
        public Price price { get; set; }
        public string CurrencyCode { get; set; }
        public decimal RoomPrice { get; set; }
        public decimal Tax { get; set; }
        public decimal ExtraGuestCharge { get; set; }
        public decimal ChildCharge { get; set; }
        public decimal OtherCharges { get; set; }
        public decimal Discount { get; set; }
        public decimal PublishedPrice { get; set; }
        public int PublishedPriceRoundedOff { get; set; }
        public decimal OfferedPrice { get; set; }
        public decimal AgentCommission { get; set; }
        public decimal AgentMarkUp { get; set; }
        public decimal TDS { get; set; }
        public decimal ServiceTax { get; set; }
        public List<hotelpassenger> hotelpass { get; set; }
}

Manish K. Agarwal

пожалуйста, поделитесь кодом, в котором вы назначаете параметры, используемые для каждого из них

ZurdoDev

Ошибка означает, что вы не можете выполнить цикл над любыми объектами, которые вы пытаетесь выполнить, потому что они не реализуют IEnumerator. Но поскольку вы не показали нам код, который на самом деле создает ошибку, я не уверен, что вы хотите, чтобы мы сделали.

2 Ответов

Рейтинг:
2

OriginalGriff

Вы не можете перебирать свойства объекта с помощью foreach или даже for цикл - или вы можете, но он требует много работы с отражением, и он создает код, который трудно поддерживать.
Использовать foreach целевой объект должен быть экземпляром класса, реализующего iEnumerable или iEnumerable<T> - набор других объектов, таких как List<T> или даже ArrayList. Вы не можете просто поместить туда экземпляр "случайного" класса и ожидать, что он будет знать, что вы хотите выполнить одну и ту же задачу для каждого свойства.

Если вы хотите назначить параметры, вы действительно должны делать это один за другим, а не пытаться работать с циклом - вы получите проблемы с обслуживанием, если этого не сделаете.


Рейтинг:
1

aparnalakshmi

общественные BookRequest класса : интерфейс IEnumerable&ЛТ;KeyValuePair в<строка, объект&ГТ;&ГТ;
{
публичная строка EndUserIp { get; set; }
публичная строка TokenId { get; set; }
идентификатор публичных строку { получить;набор; }
public int ResultIndex { get; set; }
публичная строка HotelCode { get; set; }
строки общественных класса { получить; набор; }
public string GuestNationality { get; set; }
public int NoOfRooms { get; set; }
публичная строка ClientReferenceNo { get; set; }
public Boolean IsVoucherBooking { get; set; }

публичный интерфейс IEnumerator&ЛТ;KeyValuePair в<строка, объект&ГТ;&ГТ; метод getenumerator()
{
верни это.Метод gettype().Метод Getproperties(Флаг Bindingflags.Public | BindingFlags.Пример).ToDictionary(p => p.Name, p => p.GetGetMethod().Invoke(this, null)).Метод getenumerator();
}

IEnumerator IEnumerable.Метод getenumerator()
{
бросить новое исключение notimplementedexception();
}
}



теперь для повторения

var obj = новая модель MyModel();
foreach(var kv в obj)
Приставка.WriteLine(kv.Key + ": "+ kv.Value ?? "нулевой");