Поля и свойства "backingField" являются полуправильными: синтаксис { get; private set; }
компилируется как поле поддержки и свойства, которые выполняют простое назначение и доступ. IL перечислит поле поддержки как имеющее недопустимое имя, и это нормально. Тем не менее, свойства должны были включать содержимое метода getter & setter (что да, было бы синтаксической ошибкой из-за неверного имени поля, но это точное представление IL). Свойства должны включать либо скомпилированные тела, либо находиться в режиме { get; private set; }
с отсутствующими полями подложки. Неправильно указывать и поле поддержки, и синтаксис { get; private set; }
.
Декомпилированный код для GetSampleProducts, безусловно, неверен ... Он нигде не использует название продукта. Я предполагаю, что декомпилятор не обрабатывает синтаксис инициализатора объекта. (Я не знаю, правильное ли это имя.)
Оригинал:
return new List<Product>()
{
new Product() { Name = "ProductA", Price = 12.33M },
new Product() { Name = "ProductB", Price = 13.32M },
new Product() { Name = "ProductC", Price = 23.43M },
new Product() { Name = "ProductD", Price = 23.55M }
};
декомпилированные:
public static List<Product> GetSampleProducts()
{
List<Product> products = new List<Product>();
Product num1.Price = new decimal(1233, 0, 0, false, 2).Add(num1);
Product product1.Price = new decimal(1332, 0, 0, false, 2).Add(product1);
Product num2.Price = new decimal(2343, 0, 0, false, 2).Add(num2);
Product product2.Price = new decimal(2355, 0, 0, false, 2).Add(product2);
return products;
}
Должно быть что-то вроде этого:
List<Product> products = new List<Product>();
Product product1 = new Product();
product1.Name = "ProductA";
product1.Price = new decimal(1233, 0, 0, false, 2);
products.Add(product1);