Задать вопрос
  • Насколько сложно сделать рефакторинг проекта и переписать код с C# на Python/Java?

    @kttotto
    пофиг на чем писать
    Если, как Вы говорите, проект написан чисто, задокументирован и адекватно выполняет свои задачи, то зачем его переписывать? Если дело только в виндовс, то дешевле и быстрее перевести под Core, будет Вам линукс.

    насколько адекватно оставлять Backend на C# в 2018 году?

    Вот именно сейчас это адекватно) Большинство нового интерпрайза начинают писать на C#. Нам, наоборот, приносили большой проект с Питона переписать.

    Я считаю, что переписывать стоит только если проект не справляется с задачами или затруднена дальнейшая поддержка на этой технологии. А так, какая разница, но чем он.
    Ответ написан
    5 комментариев
  • Получить текстовое представление формулы, записанной в коде, обратно в текст?

    @kttotto
    пофиг на чем писать
    Будет много скобочек, но если такой вариант устроит
    static void Main(string[] args)
    {
    	Expression<Func<double, double, double>> exp = (OTSTUP_SVAYA_MIN_B, D_SVAYA) => (OTSTUP_SVAYA_MIN_B * 2 + D_SVAYA * 3 + D_SVAYA);
    	var expBody = ((LambdaExpression)exp).Body.ToString();
    
    	Console.WriteLine(expBody);
    
    	double _OTSTUP_SVAYA_MIN_B = 1;
    	double _D_SVAYA = 2;
    
    	var expBodyWithParams = expBody.Replace("OTSTUP_SVAYA_MIN_B", _OTSTUP_SVAYA_MIN_B.ToString()).Replace("D_SVAYA", _D_SVAYA.ToString());
    
    	Console.WriteLine(expBodyWithParams);
    	Console.ReadKey();
    }


    Если грохать лишние скобочки, то дерево expBody надо обходить самостоятельно рекурсивно и строить строку уже на свой вкус.
    Ответ написан
  • Как полностью очистить массив?

    @kttotto
    пофиг на чем писать
    checkAddDel = new int[0]
    Массив всегда имеет предопределенную длину, которая не меняется, можно только создать новый с нужным размером.
    Ответ написан
    Комментировать
  • Как задать максимальный уровень для навигационный свойств при использовании include?

    @kttotto
    пофиг на чем писать
    Если Вы пытаетесь сериализовать ef объект в json, то JsonConvert в этом случает будет рекурсией обходить все поля внутри и конечно в какой то момент зациклится. Для таких случаев обычно мапят ef объект на свою модель и уже ее и сериализуют.

    Еще вот здесь есть такой вариант
    return JsonConvert.SerializeObject(results, Formatting.Indented, 
    new JsonSerializerSettings { 
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
    });
    Ответ написан
    1 комментарий
  • Почему IndexOutOfRangeException: Array index is out of range?

    @kttotto
    пофиг на чем писать
    Наверняка потому, что tempCell.Length < Word.Length. На какой то итерации ошибка и вылезет.
    Ответ написан
    8 комментариев
  • $ajax запрос выполняется многократно?

    @kttotto
    пофиг на чем писать
    Первый вариант, это вынести его из функции. В таком виде
    $(document).on('click', '.add_slide_btn', function () ...

    нет нужды его определять каждый раз при клике, т.к. даже если на момент объявления обработчика еще нет .add_slide_btn, то он всеравно отработает, даже если Вы этот селектор позже добавите.
    Второй вариант on поменять на one, например
    $('.add_slide_btn').one('click', function () ...
    тогда это событие будет одноразовым.
    Ответ написан
    1 комментарий
  • Откуда может вылезать NullReference?

    @kttotto
    пофиг на чем писать
    Вам правильно пишут: без callstack невозможно узнать, где именно ошибка вылезла, может даже не в этом методе, может где-то внутри GeneratePairGame, может randomLevel = null. Нужно логировать Exception, заверните тело кейса внутрь try-catch
    case 2:
    	try
    	{
    		GeneratePairGame(randomLevel);
    		...
    		break;
    	}
    	catch(Exception ex)
    	{
    		Debug.Log(ex);
    	}

    Тогда будет точно видно где и что произошло.
    Ответ написан
    1 комментарий
  • Почему не верное решение в задании?

    @kttotto
    пофиг на чем писать
    Ваш код работает правильно. Возможно на ресурсе ошибка проверки верификации кода.5b00aeb4c2977467279845.png
    Ответ написан
    Комментировать
  • Правильное использование virtual, override, new?

    @kttotto
    пофиг на чем писать
    Значит ли это, что все методы следует делать виртуальными?

    Нет, не значит. Если разрешить переопределять все, то можно логику поломать. А если Вы пишите библиотеку и разрешите все и вся менять? Переопределять можно разрешать в местах, где используется стратегия: где есть обобщенный класс и наследуемые классы могут реализовывать собственную логику.
    Если вдруг, в процессе разработки, возникнет необходимость разрешить переопределение, то дописать override недолго.
    Ответ написан
    Комментировать
  • Почему такое поведение в цикле forEach?

    @kttotto
    пофиг на чем писать
    Если напишете так
    var arr = [{name:'hello'},{name:'house'},{name:'human'}]
    var name = 'John';
    arr.forEach(function(item,i,arr){
      item.name = name;
    })
    console.log(arr);

    Тогда
    (3) [{…}, {…}, {…}]
    {name: "John"},
    {name: "John"},
    {name: "John"}

    В item находится значение элемента а не сам элемент, оберните значение в объект как в примере выше, тогда item будет ссылочным, а так в ней только копия значения, поэтому изменять будете копию, а не сам элемент.
    Ответ написан
    Комментировать
  • На чём переписать desktop приложение в браузерное?

    @kttotto
    пофиг на чем писать
    У Вас же нет условия, что это должен быть SPA? Админку для бд можно сделать на стандартном Razor движке в ASP MVC или уже сразу в ASP Core. Будет минимум js, все просто и быстро.
    Ответ написан
    Комментировать
  • Как в RabbitMQ, или без него, настроить классическую очередь?

    @kttotto
    пофиг на чем писать
    Не совсем понятно, зачем очередь на каждом компьютере? По сути очередь нужна только на компьютере №2. Все клиенты отправляют на него отчет, отчеты кладутся в очередь, компьютер №1 забирает их из этой очереди. И очередь для того и нужна, чтобы не зависеть, в сети ли компьютер №1. Все сообщения будут лежать в очереди, пока первый их не заберет. Если в течении какого то времени сообщение не забрали, клиенту дается ответ, что первый не доступен и клиент через таймаут шлет очередное сообщение.

    Каждый клиент имеет свой идентификатор, каждый отчет свой идентификатор и если в очереди оказалось несколько сообщений от одного клиента и с одним идентификатором отчета, то учитывается последний по дате. Ну в принципе и все.
    Ответ написан
  • Используя метод return Json() на клиенте в success function(data) undefined. Как исправить?

    @kttotto
    пофиг на чем писать
    Сделайте запрос к своему api в строке браузера или через postman. Если придет нормальный json, значит дело в запросе ajax, в его настройках, если нет - значит не сериализуется объект в json.
    Ответ написан
    6 комментариев
  • Как реализовать фабричный метод без switch?

    @kttotto
    пофиг на чем писать
    Вы же сами ответили на свой вопрос - фабричный метод. Описание и реализация этого паттерна есть для всех языков вики
    По поводу "отдельных фабрик" не совсем понятно. Сам по себе паттерн абстрагирует логику принятия решения о создании объекта. Эта логика основана на каком то условии: switch / нескольких if / отдельных фабрик. Во что Вы обернете это условие - Ваш выбор.
    Ответ написан
    2 комментария
  • Как с помощью события onchange select, заполнить сразу 3 input?

    @kttotto
    пофиг на чем писать
    На сервере
    <select id="select">
    	<option selected="selected">Выберите город</option>
    	@foreach (var b in ViewBag.cities)
    	{
    		<option value='@JsonConvert.SerializeObject(b)'>@b.Name</option>
    	}
    </select>

    На клиенте
    $('#select').change(function(){
    	var $val = $(this).find('option:selected').val();
    	if(!$val) return;
    	var obj = JSON.parse($val); // здесь js объект с вашими полями
    	// и здесь его можно обработать и заполнить свои инпуты
    	var t_ext = obj.T_ext;
    	var t_ht = obj.T_ht;
    	var z_ht = obj.Z_ht;
    
    	$('input#T_ext').val(t_ext);  // Добавил исходя из Ваших комментариев других ответов
    	$('input#Zht').val(t_ht);
    	$('input#Tht').val(z_ht);
    });
    Ответ написан
    6 комментариев
  • Есть ли какие-либо недостатки у статических методов?

    @kttotto
    пофиг на чем писать
    В первую очередь статические методы и классы это не комильфо не потому, что не ООП, а потому, что во первых, дают жесткую привязку к коду, код становится негибким, а во вторых, тестировать код, наполненный статикой - проблемно, дают много зависимостей от которых не абстрагироваться. Плюс глобальная видимость.

    Статические методы удобно, когда их используешь просто как глобальную функцию, которая нужна во многих местах, например, преобразовать строку или дату к какому-то виду. Только такая функция не должна содержать бизнес логику. В многопоточном режиме может возникнуть проблема в тех же случаях, что и во всех остальных - когда внутри метода изменяются данные с общшим доступом.

    Если возникает необходимость сделать статические методы с логикой посерьезней фильтра списка, например, доступ к БД, то есть пара вариантов в этом случае. Первый, сделать синглтон, если хотите, чтобы была одна точка входа для доступа к БД и Вы хотите эту точку и попытки получения данных из БД контролировать.
    Второй, это иньекция зависимостей и контейнеры для них, всевозможные IoC. В настройках IoC указываете, что выдавать единственный экземпляр и он по сути сам станет singlton, фабрика контейнера не будет на каждое обращение создавать новый экземпляр.

    Лично я статическими методами и даже полями пользуюсь. Иметь хелперы, это удобно, но, конечно, без фанатизма.
    Ответ написан
    Комментировать
  • Возможна ли проверка кода в Visual Studio перед pull-ом?

    @kttotto
    пофиг на чем писать
    Пока Вы его не подтяните, то никак.
    А дальше Ctr + Shift + B.
    До того как Вы не попробуете его собрать, полный список проблем Вы не получите. Максимум, это локально статический анализатор, который подчеркнет красным критические места, которые не скомпилируются. Ну или еще анализатором, если у Вас Enterprise версия: Analyze -> Run code analyze.
    Ответ написан
    Комментировать
  • Как создать поле типа Generic List в классе?

    @kttotto
    пофиг на чем писать
    Если Вы хотите именно "при создании экземпляра класса в поле можно было записать List любого типа", то generic тип должен быть определен на стадии компиляции и если Вы явно не указали его тип, то компилятор пытается найти класс T в текущем пространстве имен, а его у Вас нет, от сюда и ошибка.

    Если нужно внутри класса использовать generic поле, то и класс Вы должны определить тем же типом.
    public partial class AddForm<T> : Form where T: class
    {
        public string itemToAdd { get; set; }
        public List<T> list { get; set; }
    
        public AddForm()
        {
            InitializeComponent();
        }
    }

    И при создании экземпляра формы указать
    var form = new AddForm<Album>()
    В этом случае поле List будет типизированно типом Album.

    Если же список внутри формы небольшой и можно пренебречь затратами на приведение типов, то можно сделать список типа object.
    public partial class AddForm : Form
    {
        public string itemToAdd { get; set; }
        public List<object> list { get; set; }
    
        public AddForm()
        {
            InitializeComponent();
        }
    }

    А доставать от туда по типу можно многими способами, например, если знаете заранее какой там тип то сделать привидение
    var albums = form.list.Cast<Album>();
    Если нет - то сделать фильтрацию по типу
    var albums = form.list.OfType<Album>();
    var photos = form.list.OfType<Photo>();
    Ответ написан
    Комментировать
  • Как проверить значение формы на jQuery, если используется $(this)?

    @kttotto
    пофиг на чем писать
    indexOf(): он не работает с jQuery-функциями типа $(this).text()

    Странные вещи Вы говорите, все работает. Но в вашем случае надо не text брать, а value.
    if($(this).val().indexOf("@") > 0) { ... }
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    @kttotto
    пофиг на чем писать
    У меня Ваш код работает
    тут
    А вообще не стоит пренебрегать ";" в конце строки.
    Ответ написан