Ответы пользователя по тегу C#
  • ASP.MVC выполнение/подключение скриптов - Section already defined: "Menu". - что это означает?

    Структура страницы обычно задается в файле _Layout.cshtml (может быть задан непосредственно в виде или контроллере), там указывается какие секции могут/должны быть отрендерены и где (@RenderSection("scripts", required: false)). При рендеринге страницы секция с одним и тем же именем не может встречаться более одного раза. Вероятно у Вас определение секции (@section Menu) встречается несколько раз. Проверьте какой используется Layout, какие секции там определены и нет ли повторений этих секций в Layout, View и Partial View используемых при рендеринге этой страницы.
    Ответ написан
    Комментировать
  • Как делать EF миграции бд на сервере Asp.net?

    Читать про инициализатор MigrateDatabaseToLatestVersion, попробуй начать с этого.

    Если в кратко:
    AutomaticMigrationsEnabled = false;
    Миграции должны быть именованными и сохранятся в проекте в виде файлов, что бы быть скомпилированными и присутствовать в сборке: "Add-Migration -Name v1".
    при публикации устанавливаем флажок "Execute code first migrations (runs on application start)" или добавляем в раздел entityFramework->contexts описание нужного DbContext с описанием инициализатора (Пример с нужным нам MigrateDatabaseToLatestVersion в самом конце страницы).
    Ответ написан
    Комментировать
  • Не получается получить все положительные числа из массива. Что не так?

    Может уже пора на LINQ ?

    int[] num = { 5, -7, -1, 3, 9};
    Console.WriteLine("Сумма всех положительных чисел: {0}",  num.Where(i => i > 0).Sum());
    Ответ написан
    2 комментария
  • Почему не удаляет xml элемент(LINQ to XML)?

    Так не пойдет, нельзя менять коллекцию при её перечислении.

    foreach(var n in myOwner.xmlDoc.Descendants("links")
                        .Elements("link")
                        .Where(x => x.Value == listBoxLinks.SelectedItem)
                       .ToList())
    {
                       n.Remove();
    }
    Ответ написан
    Комментировать
  • Как эффективно создать "бесконечную" строку?

    Конечно аналитически найти индекс это true path, но сделать "в лоб" тоже можно. Для str = "123456798" ответ получишь через 3 минуты :)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace FindString
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = "123456798";
                string buf = string.Concat(Generator.All().Take(str.Length));
    
                ulong index = 0;
                foreach (var c in Generator.All().Skip(str.Length))
                {
                    if (buf == str)
                    {
                        break;
                    }
    
                    buf = buf.Substring(1) + c;
                    ++index;
                }
    
                Console.WriteLine("index is {0}", index);
                Console.ReadKey();
            }
        }
    
        public class Generator
        {
            public static IEnumerable<char> All()
            {
                ulong v = 0;
                while(true)
                {
                    ++v;
                    foreach(var c in v.ToString().ToCharArray())
                    {
                        yield return c;
                    }
                }
            }
        }
    }
    Ответ написан
    Комментировать
  • Как из строки вытащить действие над числом?

    Обычно для разбора не пишут свои велосипеды, а используют генераторы лексических анализаторов Lex (.net аналог GPLEX) и используют совместно с генератором синтаксических анализаторов yacc (.net аналог GPPG) .

    Можно посмотреть пример.
    Ответ написан
    2 комментария
  • В каких случая использовать обобщенные коллекции ICollection, IList, List?

    Про интерфейсы IEnumerable и IQueryable почитай мой ответ тут.

    Интерфейс ICollection наследуется от IEnumerable и подразумевает, что реализующие его классы умеют эффективно вставлять и удалять элементы.

    Интерфейс IList наследуется от ICollection и подразумевает, что реализующие его классы умеют предоставлять доступ к элементу по индексу.

    List это конкретный класс, который реализует интерфейсы IList, ICollection т.е. подразумевается, что он умеет эффективно вставлять/удалять и давать доступ по индексу.

    Попробую на пальцах когда и что использовать...
    Функция получает:
    IEnumerable - подразумевается, что ты только перебираешь элементы.

    IQueryable - клиентам придется попотеть что бы ты мог дополнить дерево выражений, что бы обеспечить более точный запрос.

    ICollection - ты уверен, что хочешь что то добавить или удалить в коллекции в этой функции ? Один из звоночков, что с архитектурой могут быть проблемы.

    IList - а ты уверен что тебе очень критично иметь доступ по индексу в этой функции ? Второй звоночек про архитектуру.

    List - работаю только со списками и не пытайтесь дать мне другой контейнер.

    Функция возвращает:
    IEnumerable - никаких обещаний, пусть клиенты рассчитывают только на перебор.

    IQueryable в функции запрос (например к дб) фактически не выполняется и клиенты могут попытаться его дополнить условиями, что бы с базы шло меньше данных.

    ICollection - ты возвращаешь коллекцию путь кто хочет тот и добавляет и удаляет в ней элементы.

    IList - ты уже создал в функции соответствующую коллекцию, возможно кому то понадобится доступ по индексу.

    List - да мне наc..ть на интерфейсы создал список - отдал список и я всегда буду создавать список, даже если мне потребуется создать последовательность из 100500 миллионов элементов.
    Ответ написан
    Комментировать
  • Как посчитать количество одинаковых элементов в строчке и вывести первый?

    Вариант на Linq, Extension methods и generic (можно использовать с любым типом массивов).

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    
    namespace easyMatrix
    {
        class Program
        {
            static void Main(string[] args)
            {
                var arr = GetTestArray();
    
                // Вывод массива
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    Console.WriteLine(string.Join(" ", arr.GetRow(i).Select(item => item.Value)));
                }
                Console.WriteLine();
                
                
                foreach(var row in arr.GetAllRows())
                { 
                    foreach (var range in row.Split((cur, next) => cur.Value != next.Value))
                    {
                        Console.WriteLine("- [{0} {1}] {2} {3}", range.Item1.Row + 1, range.Item1.Col + 1, range.Item1.Value, range.Item2);
                    }
                }
    
                foreach (var col in arr.GetAllCols())
                {
                    foreach (var range in col.Split((cur, next) => cur.Value != next.Value))
                    {
                        Console.WriteLine("| [{0} {1}] {2} {3}", range.Item1.Row + 1, range.Item1.Col + 1, range.Item1.Value, range.Item2);
                    }
                }
    
                foreach (var d in arr.GetAllRightDioganals())
                {
                    foreach (var range in d.Split((cur, next) => cur.Value != next.Value))
                    {
                        Console.WriteLine("\\ [{0} {1}] {2} {3}", range.Item1.Row + 1, range.Item1.Col + 1, range.Item1.Value, range.Item2);
                    }
                }
    
                foreach (var d in arr.GetAllLeftDioganals())
                {
                    foreach (var range in d.Split((cur, next) => cur.Value != next.Value))
                    {
                        Console.WriteLine("/ [{0} {1}] {2} {3}", range.Item1.Row + 1, range.Item1.Col + 1, range.Item1.Value, range.Item2);
                    }
                }
    
                Console.WriteLine();
                var lookup = arr.GetRow(0).ToLookup(c => c.Value);
    
                Console.WriteLine("Lookup второй строки:");
                foreach (var g in lookup)
                {
                    Console.WriteLine("'{0}' {1}", g.Key, g.Count());
                }
                Console.WriteLine();
    
                var group = lookup.OrderByDescending(g => g.Count()).First();
                Console.WriteLine("Максимальное количество вхождений {0} обнаружено для символа '{1}'", group.Count(), group.Key);
    
                Console.WriteLine("Обчщее количество повторяющихся символов {0}", lookup.Where(g => g.Count() > 1).Sum(s => s.Count()));
    
    
                Console.ReadKey();
            }
    
            public static Char[,] GetTestArray()
            {
                var lst = new string[]{
                    "b=b==",
                    "1b2ba",
                    "c4b++",
                    "5cab+"
                };
    
                Char[,] arr = new Char[lst.Count(), lst.First().Length];
    
                for (int rowIndex = 0; rowIndex < lst.Count(); ++rowIndex)
                {
                    var row = lst[rowIndex];
    
                    for (int colIndex = 0; colIndex < lst.First().Length; ++colIndex)
                    {
                        arr[rowIndex, colIndex] = row.ElementAt(colIndex);
                    }
                }
    
                return arr;
            }
        }
    
        public static class IEnumerableExtension
        {
            public static IEnumerable<Tuple<T, int>> Split<T>(this IEnumerable<T> items, Func<T, T, bool> separator)
            {
                T p = items.First();
                int cnt = 0;
                foreach (var item in items)
                {
                    if (separator(p, item))
                    {
                        if (cnt > 1)
                        {
                            yield return Tuple.Create(p, cnt);
                        }
    
                        p = item;
                        cnt = 1;
                    }
                    else
                    {
                        ++cnt;
                    }
                }
    
                if (cnt > 1)
                {
                    yield return Tuple.Create(p, cnt);
                }
            }
        }
    
        public static class ArrayExtension
        {
            public class Item<T>
            {
                private int _row;
                public int Row { get { return _row; } }
    
                private int _col;
                public int Col { get { return _col; } }
    
                private T _value;
                public T Value { get { return _value; } }
    
                public Item(T[,] arr, int row, int col)
                {
                    Debug.Assert(row >= 0 && col >= 0 && row < arr.GetRowCount() && col < arr.GetColCount());
    
                    _value = arr[row, col];
                    _row = row;
                    _col = col;
                }
            }
    
            public static int GetRowCount<T>(this T[,] arr)
            {
                return arr.GetLength(0);
            }
    
            public static int GetColCount<T>(this T[,] arr)
            {
                return arr.GetLength(1);
            }
    
            public static IEnumerable<Item<T>> GetCol<T>(this T[,] arr, int col)
            {
                for (int i = 0; i < arr.GetRowCount(); i++)
                {
                    yield return new Item<T>(arr, i, col);
                }
            }
    
            public static IEnumerable<IEnumerable<Item<T>>> GetAllCols<T>(this T[,] arr)
            {
                for (int i = 0; i < arr.GetColCount(); i++)
                {
                    yield return arr.GetCol(i);
                }
            }
    
            public static IEnumerable<Item<T>> GetRow<T>(this T[,] arr, int row)
            {
                for (int i = 0; i < arr.GetColCount(); i++)
                {
                    yield return new Item<T>(arr, row, i);
                }
            }
    
            public static IEnumerable<IEnumerable<Item<T>>> GetAllRows<T>(this T[,] arr)
            {
                for (int i = 0; i < arr.GetRowCount(); i++)
                {
                    yield return arr.GetRow(i);
                }
            }
    
            public static IEnumerable<Item<T>> GetRightDioganal<T>(this T[,] arr, int row, int col)
            {
                while (row < arr.GetRowCount() && col < arr.GetColCount())
                {
                    yield return new Item<T>(arr, row, col);
                    ++row;
                    ++col;
                }
            }
    
            public static IEnumerable<IEnumerable<Item<T>>> GetAllRightDioganals<T>(this T[,] arr)
            {
                foreach (var item in arr.GetCol(0).Reverse().Skip(1)          // first col items skip last
                            .Concat(arr.GetRow(0).Skip(1).Reverse().Skip(1))  // first row items skip first and last
                        )
                {
                    yield return arr.GetRightDioganal(item.Row, item.Col);
                }
            }
    
            public static IEnumerable<Item<T>> GetLeftDioganal<T>(this T[,] arr, int row, int col)
            {
                while (row < arr.GetRowCount() && col >= 0)
                {
                    yield return new Item<T>(arr, row, col);
                    ++row;
                    --col;
                }
            }
    
            public static IEnumerable<IEnumerable<Item<T>>> GetAllLeftDioganals<T>(this T[,] arr)
            {
                foreach (var item in arr.GetRow(0).Skip(1)                                                   // first row items skip first
                                        .Concat(arr.GetCol(arr.GetColCount() - 1).Skip(1).Reverse().Skip(1)) // last col skip first and last
                        )
                {
                    yield return arr.GetLeftDioganal(item.Row, item.Col);
                }
            }
        }
    }
    Ответ написан
    Комментировать
  • Какое необходимо условие для выборки xpath?

    Попробуй
    var node = document.DocumentNode.SelectNodes("//tr[not(@class) and count(td) = 18]/td[@style='width:1%;' or @class='coef' or (@class='left' and .//a)]");
    Ответ написан
    3 комментария
  • Как обновить лишь часть строк в окне консоли?

    Что бы не "терять" ввод пользователя бери вот это, если нужно переставить курсор в конкретную строку то гуглим Console.CursorTop и Console.CursorLeft.
    Ответ написан
    Комментировать
  • [Решено] После вставки значения из массива бесследно исчезает вторая часть строки, как ее правильно вставить?

    Не вижу имен аргументов, которые обычно указываются с использованием "-" или "/".
    Возможно должно быть:

    startInfo.Arguments = "-MainD IDD -ID "+ ED +" -RIN "+ value;

    Если это одиночный аргумент то надо помнить, что пробелы считаются разделителями между несколькими аргументами и одиночный аргумент, включающий пробелы, должен быть заключен в кавычки, которые не забываем экранировать:

    startInfo.Arguments = "-someKey \"MainD=IDD ID="+ ED +" RIN="+ value + "\"";
    Ответ написан
  • Не корректно работает сортировка. в чем ошибка?

    Порядок как раз лексикографический, а если требуется сортировать как числа то:

    lane.Select(s => int.Parse(s)).OrderByDescending(s => s);
    Ответ написан
    Комментировать
  • Как прописать роутинг в asp.net mvc4?

    Замените RedirectToAction на просто Redirect("~/Admin/Home") или правильно задавайте параметры RedirectToAction("Index", "Home", new {area = "Admin"});
    Ответ написан
  • Как реализовать полиморфные связи Entity Framework?

    Классы StaffReports_ и StaffReports1_ не нужны пишем просто:

    в class Staff
    public virtual ICollection<Report> StaffReports { get; set; }


    в class Report
    public virtual ICollection<Staff> Interns { get; set; }


    Дальше конфигурируем (см. void OnModelCreating(DbModelBuilder modelBuilder)
    Ответ написан
    4 комментария
  • Какие ответы лучше отдавать с сервера?

    Не корректно сравнивать Create и Edit. К Edit вопросов не возникает имхо правильно и понятно.
    Ответ написан
    Комментировать
  • Как найти различные элементы Arraylist?

    result1.Except(result2).Union(result2.Except(result1));
    Ответ написан
    Комментировать
  • Я не умею готовить репозиторий или он просто не очень?

    Думаю если небольшой, новый проект в котором все данные лежат в базе, которая создается из EF Code First, то использовать репозиторий особой нужды нет. Но например если сегодня я беру данные из базы, а завтра планирую получать от api или какой нибудь NoSQL к которой нет ORM ? А может сущности, которыми оперирует моё приложение ну совсем не похожи на те что лежат в базе или "собираются" из нескольких источников ?
    Не надо рассматривать репозиторий как обертку над EF.

    Теперь пара замечаний:

    вот так
    public IEnumerable<Student> GetLogs()
    {
          return context.Logs;
    }


    будет возвращен IQueryable и

    GetLogs().Where(...)

    будет ограничивать выборку с сервера.

    Я бы с удовольствием посмотрел на страницу, где выводятся ВСЕ логи всех админов.
    Но если она все же реально нужна я бы формировал её на клиенте так: получил AJAX запросом всех админов для каждого из них параллельно или последовательно запросил топ 100 мессаджей из логов (при необходимости следующие 100). Как следствие отталкиваться надо от UX тогда не будет желания писать репозиторий, который возвращает ВСЕ записи.

    ЗЫ Пока ORM обеспечивает 100% данных и хватает мощности DB сервера все окей и без репозиториев, но при высокой нагрузке архитектура в корне другая и JOINы там выполняют отнюдь не DB сервера.
    Ответ написан
    Комментировать
  • Как использовать Node.js в проекте ASP.Net MVC?

    В ASP.NET Gulp,Grunt, Browserify и так далее в основном используются для сборки Front End, что бы посмотреть готовый пример создайте новый проект ASP.NET Core.

    Прикручиваются к существующему проекту они через npm (init, install). Использовать на сервере JavaScript + .NET особо смысла не вижу, но https://github.com/tjanczuk/edge при необходимости позволяет это сделать.
    Ответ написан
  • Одновременный вывод и ввод текста?

    Я так понимаю вывод происходит из другого потока ? Тогда нужно синхронизировать потоки, что то типа
    lock(некая глобальная переменная)
    {
          var top = Console.CursorTop;
          var left = Console.CursorLeft;
    
          Console.CursorTop = 0;
          Console.CursorLeft = 0;
                                  
          Console.Write(DateTime.Now.ToShortDateString());
    
          Console.CursorTop = top;
          Console.CursorLeft = left;
    }
    Ответ написан
    4 комментария
  • Как работать c XML с слабыми ссылками?

    Рекомендую использовать XLinq это новый взгляд на XML в .NET. Ниже пример:
    using System;
    using System.Xml;
    using System.Xml.Linq;
    					
    public class Program
    {
    	public static void Main()
    	{
    		string text = "Hello World";
    		var doc = XDocument.Parse(@"<?xml version=""1.0"" encoding=""utf-8""?><root />");
    		doc.Root.Add(new XElement("sendpost", text));
    		
    		Console.WriteLine(doc.ToString());
    	}
    }
    Ответ написан
    Комментировать