#c_sharp #делегаты
Подскажите пожалуйста, как реализовать Вот исходный код vm.RegisterCommand('+', v => Inc(v)); private static void Inc(IVirtualMachine v) { if (v.Memory[v.MemoryPointer] == (char)255) v.Memory[v.MemoryPointer] = (char)0; else v.Memory[v.MemoryPointer]++; } Хочу заменить на что то вроде vm.RegisterCommand('+', b => (b.Memory[b.MemoryPointer] == 255) ? 1 : 2 ); на 1:2 не обращайте внимания это для сокращения кода
Ответы
Ответ 1
Ну у вас по сути сложение по модулю, поэтому можно записать вместо if что-то вроде v.Memory[v.MemoryPointer] = (char)((v.Memory[v.MemoryPointer] + 1) % 256), ну и, соответственно, в виде лямбды: vm.RegisterCommand('+', v => v.Memory[v.MemoryPointer] = (char)((v.Memory[v.MemoryPointer] + 1) % 256)); Если IVirtualMachine.Memory – это реально byte-массив, то код можно сократить: vm.RegisterCommand('+', v => v.Memory[v.MemoryPointer]++)); Если вы хотите переписать свой метод дословно, то это будет выглядеть так: vm.RegisterCommand('+', v => { if (v.Memory[v.MemoryPointer] == (char)255) v.Memory[v.MemoryPointer] = (char)0; else v.Memory[v.MemoryPointer]++; }); Но это не улучшает читаемость, а даже скорее наоборот. А с использованием тернарного оператора, например, так: vm.RegisterCommand('+', v => v.Memory[v.MemoryPointer] = (char)(v.Memory[v.MemoryPointer] == 255 ? 0 : (v.Memory[v.MemoryPointer] + 1) ));
Комментариев нет:
Отправить комментарий