Здравствуйте, Shmj, Вы писали:
S>Так нужно же 2 значения — state1 и state 2. Делать одним длинным списком?
Вы точно знакомы с языками программирования? Хеш таблицы, типы данных?
State = {state1,state2,...}
Re[4]: Таблица из двух параметров - как лучше записать?
Здравствуйте, kov_serg, Вы писали:
S>>Так нужно же 2 значения — state1 и state 2. Делать одним длинным списком? _>Вы точно знакомы с языками программирования? Хеш таблицы, типы данных? _>State = {state1,state2,...}
По условиям задачи каждый из state (и state1 и state2) имеет 3 варианта значений.
Re[5]: Таблица из двух параметров - как лучше записать?
Здравствуйте, Shmj, Вы писали:
S>Самое наглядное — это таблица.
Таблицу тебе тоже уже предложили в виде Dictionary<State, Action>, но и она тебе тоже не мила.
S> Вот представьте таблицу — разве будет удобно, если ее представить в виде плоского теста и каждый раз дублировать названия столбцов и строк?
Зачем в PM дублировать названия столбцов? Кортежи никто пока не отменял.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Таблица из двух параметров - как лучше записать?
public class C {
public static Func<int, String>[,] _handlers = new Func<int, String>[,]{
{A1, B1, C1},
{A2, B2, C2},
{A3, B3, C3}
};
public void M(int state1, int state2, int value) {
Console.WriteLine(_handlers[state1, state2](value));
}
public static string A1(int a) => a.ToString();
public static string B1(int a) => (2*a).ToString();
public static string C1(int a) => (3*a).ToString();
public static string A2(int a) => (a+1).ToString();
public static string B2(int a) => (2*a+1).ToString();
public static string C2(int a) => (3*a+1).ToString();
public static string A3(int a) => (a-1).ToString();
public static string B3(int a) => (2*a-1).ToString();
public static string C3(int a) => (3*a-1).ToString();
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Shmj, Вы писали:
S>Есть 2 параметра (или даже больше) state1 и state2. В зависимости от значений state1 и state2 — нужно выполнять определенные действия или бездействия (а так же генерить исключения — если такая комбинация не возможна).
S>Можно использовать вложенные друг в друга switch/case. Если в каждом из state 3 возможных значения — то получится 3 switch и внутри каждого — еще по 3 штуки switch. Есть ли что более красивое?
Да, оно таки. Вот помню что что-то какое встречал, но даже забыл как называется.
Но ничего годного так и не нашлось, к сожалению Самые популярные Automatonymous и stateless. Последнее толком не поддерживается. Для первого толком нет документации и нормальных примеров.
Оно же еще и умеет сохранять свое состояние.
Как часто все это дело используют вообще?
Re[3]: [Updated]Таблица из двух параметров - как лучше записать?
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Danchik, Вы писали:
D>>Я так понял вы пишете FSM (Finite State Machine). D>>Ну выбирайте, что посвежее https://stackoverflow.com/questions/632391/state-machine-frameworks-for-net
S>Да, оно таки. Вот помню что что-то какое встречал, но даже забыл как называется.
S>Но ничего годного так и не нашлось, к сожалению Самые популярные Automatonymous и stateless. Последнее толком не поддерживается. Для первого толком нет документации и нормальных примеров.
S>Оно же еще и умеет сохранять свое состояние.
S>Как часто все это дело используют вообще?
Ну вот когда надо такое трекать, например протокол обмена данными, состояние конекта, авторизации, пересылки. Если приходит ивент который никак не обрабатывается текущим состоянием — сбрасываем на реконект состояние и тд. Есть еще куча, просто гуглите. Сам себе такие клепал.
Re[5]: Таблица из двух параметров - как лучше записать?
Здравствуйте, Sinclair, Вы писали:
S>Ну, и в чём проблема?
А если еще и контекст нужно захватить и методов сильно больше двух, так что "верстка" таблицы посыпется? Это явно решение имеет наглядность только для простых случаев.
Re[5]: Таблица из двух параметров - как лучше записать?
Здравствуйте, Shmj, Вы писали:
S>А если еще и контекст нужно захватить и методов сильно больше двух, так что "верстка" таблицы посыпется?
Если вёрстка таблицы "посыпется", то надо просто пойти по стандартному пути — дать анонимным методам имена. S>Это явно решение имеет наглядность только для простых случаев.
Ну так случаи-то все разные. Конкретно ваш делается так.
Будет другой случай — будет другое решение. Например — полиморфизм.
Или вот такое тоже вполне себе прилично будет смотреться:
using System;
public class C
{
enum GradeOfMen
{
Black,
Mandarin,
Aryan
}
public static void Main(string[] args)
{
TransformAMan(GradeOfMen.Mandarin, GradeOfMen.Black);
}
static void TransformAMan(GradeOfMen fromMan, GradeOfMen toMan)
{
switch ((fromMan, toMan))
{
case (GradeOfMen.Black, GradeOfMen.Mandarin):
Wash(); GlueEyes(); break;
case (GradeOfMen.Mandarin, GradeOfMen.Black):
Soot(); Scare(); break;
case (GradeOfMen.Aryan, GradeOfMen.Black):
Soot(); break;
case(GradeOfMen.Aryan, GradeOfMen.Mandarin):
GlueEyes(); break;
case (var x, var y) when x==y:
break;
default: throw new InvalidOperationException();
}
}
static void Scare() => Console.WriteLine("Пугаем (глаза увеличиваются)");
static void Wash() => Console.WriteLine("Отмываем");
static void Soot() => Console.WriteLine("Посыпаем сажей");
static void GlueEyes() => Console.WriteLine("Клеим глаза");
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Таблица из двух параметров - как лучше записать?
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Sinclair, Вы писали:
S>>Или вот такое тоже вполне себе прилично будет смотреться:
S>Все же на первый взгляд не ясно — все ли случаи перебраны, ничего ли не упустили.
S>Наверное более подходящее решение — применить https://rsdn.org/forum/dotnet/8133614.flat