Выполнение команды — это двойной вызов функции без достижения точки останова.C#

Место общения программистов C#
Ответить
Anonymous
 Выполнение команды — это двойной вызов функции без достижения точки останова.

Сообщение Anonymous »

Я использую формы Xamarin 5.0.0.2612.
Коротко о моей проблеме:
Я хочу удалить элемент в коллекции . коллекция хранится как статическое свойство и при нажатии кнопки удаления элемент уже удаляется в момент остановки кода на моей точке останова (которая отвечает за удаление).
Я иметь общедоступное статическое свойство CurrentOrder типа Order.

Код: Выделить всё

public static Order CurrentOrder { get; set; }
Класс «Заказ» является общедоступным классом и используется для обработки заказов (добавление, удаление и изменение...).

Код: Выделить всё

public int? SalesOrderId { get; set; } = null;

// items to order or already ordered
public List OrderDetails { get; set; } = new List();

// items to delete
public List DeletedOrderDetails { get; set; } = new List();

private IOrderManager _manager;

private readonly HttpService _httpsService;
private Order()
{
_httpsService = DependencyService.Resolve();

// Create a new instance of the manager
_manager = new OrderManagerFDM();
}

private Order(int salesOrderId, List details)
: this()
{
SalesOrderId = salesOrderId;
OrderDetails = details;
}

public static Order Create(int salesOrderId, List details)
=> new Order(salesOrderId, details);

public Result AddOrderItem(OrderItem order)
{
return _manager.AddOrder(order, OrderDetails, DeletedOrderDetails);
}

public Result ModifyOrderItem(OrderItem order)
{
return _manager.ModifyOrder(order, OrderDetails);
}

public Result RemoveOrderItem(OrderItem order)
{
order.State = StateEnum.Delete;
return _manager.RemoveOrder(order, OrderDetails, DeletedOrderDetails);
}

IOrderManager используется для переключения поведения в зависимости от конфигурации проекта. На данный момент (для теста) есть только один менеджер: OrderManagerFDM

Код: Выделить всё

public class OrderManagerFDM : IOrderManager
{
// used to trace the commands
private List _addAndDeleteCommands;

public OrderManagerFDM()
{
_addAndDeleteCommands = new List();
}

public Result RemoveOrder(OrderItem itemToDelete, List orderDetails, List deletedOrderDetails)
{
// Add the command
_addAndDeleteCommands.Add(new OrderItemCommand(itemToDelete, OrderType.Remove));

try
{
// Have a look in the current orderDetails collection to find the item to delete
// And here, the itemToDelete is not found although it should be in the collection
var existingOrdered = orderDetails.FirstOrDefault(x => x == itemToDelete);

if (existingOrdered is null)
return Result.Failure("No item clould be found in orderDetails");

// Check if item is already added to sales order
if (existingOrdered.State == StateEnum.Update)
{
orderDetails.Remove(itemToDelete);

itemToDelete.IsOrdered = false;
deletedOrderDetails.Add(itemToDelete);
}
else
{
if (existingOrdered.Quantity  await ExecuteDelete());
Эта команда выполняет следующий код в ViewModel:

Код: Выделить всё

        async Task ExecuteDelete()
{
// Breakpoint 1: All items in the collection
OrderItem existingOrderDetail = Global.CurrentOrder
.OrderDetails
.FirstOrDefault(x => x.Id == _editOrderItemId);

// Breakpoint 2 : the item to delete isn't anymore in the collection
Global.CurrentOrder.RemoveOrderItem(existingOrderDetail);

// Breakpoint 3: The item isn't in the deletedOrders collection because it couldn'd be   found in the _manager
await ExecuteCancel();
}
первая строка ищет элемент, который я хочу удалить, в Global.CurrentOrder (статическое свойство с порядком), и элемент найден.
Теперь во второй строке кода мы вызываем RemoveOrderItem из статического Global.Current и передаем элемент для удаления. Теперь перед переходом элемент больше не находится в коллекции Global.CurrentOrder.OrderDetails.
Глядя на экземпляр OrderManagerFDM текущего заказа, уже существует запись с удалением того же элемента, прежде чем я введу этот код.
Точка останова 1: элемент, который нужно удалить, можно найти в коллекции
Изображение

Точка останова 2: элемента больше нет в коллекции
ItemToDelete больше не завершается
Внутри Order в Global.CurrentOrder пользовательское состояние OrderItem "itemToDelete" уже помечено как "Удалить" и находится в трассировке _manager Я вижу запись с удалением.
[img]https://i.stack.imgur.com /j4H9r.png[/img]

Изображение
< /p>
И элемент для удаления, который теперь должен быть добавлен в коллекцию DeletedOrderDetails Global.CurrentOrder, по-прежнему пуст.
Может ли кто-нибудь есть идеи, откуда это могло взяться?
Мне кажется, что что-то выполняется в разных задачах, но я не могу понять, как этого избежать.

Подробнее здесь: https://stackoverflow.com/questions/782 ... breakpoint
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»