• ASP NET Как хранить данные внутри приложения?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    У приложения есть события запуска и завершения работы.

    Общие данные можно загружать при запуске приложения (Application_Start) или подгружать в статические классы в процессе работы приложения. Либо использовать HttpApplication, хотя смысла в этом особого нет.

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

    Временные данные можно хранить в кэше.

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

    miraage
    @miraage
    Старый прогер
    Насколько я помню, это делается так:

    <a ng-attr-id="{{ user.id }}"></a>

    Но встает вопрос - зачем? Если нужные дальнейшие манипуляции - используйте директивы.
    Ответ написан
    Комментировать
  • Стоит ли начать учить c# с этого ресурса?

    @GoldGoblin
    я иногда почитываю metanit.com
    Ответ написан
    Комментировать
  • SqlException: Существует назначенный этой команде Command открытый DataReader?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    Может кому пригодится, если используется DataAdapter, то его копию нужно создавать для каждого отдельного потока
    Ответ написан
    1 комментарий
  • Сортировка пузырьком. Первый элемент?

    a_volkov1987
    @a_volkov1987
    Инженер-схемотехник
    Это не сортировка пузырьком. Это бред. Посмотрите на википедии реализации:
    https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D...

    public int[] Search(int[] gmas)
    {
        for (int i = 0; i < gmas.length-1; i++) 
        {
            bool swapped = false;
            for (int j = 0; j < gmas.length-i-1; j++) 
            {
                if (gmas[j] > gmas[j+1]) 
                {
                    int b = gmas[j]; 
                    gmas[j] = gmas[j+1];
                    gmas[j+1] = b;
                    swapped = true;
                }
            }
            if(!swapped)
            break;
        }
    }
    Ответ написан
    Комментировать
  • Сортировка пузырьком. Первый элемент?

    alsopub
    @alsopub
    Попробуйте i = 1; заменить на i = 0;
    Дело в том, что после цикла (после i=1;) будет выполнено i++.

    UPD. Вдруг кто-то еще не поймет где надо заменить 1 на 0, приведу полный код:
    class Program
        {
    
            static void Main(string[] args)
            {
                int[] mas = { 4, 5, 25, 21, 0, 8, 6, 97, 60, 46, 54 };
                Sort Ring = new Sort();
                foreach (int item in Ring.Search(mas))
                {
                    Console.Write("{0}, ", item);
                }
                Console.ReadKey();
            }
        }
        class Sort
        {
            // Сортировка пузырьком
            public int[] Search(int[] gmas)
            {
                for (int i = 1; i < gmas.Length; i++)
                {
                    if (gmas[i - 1] > gmas[i])
                    {
                        int LastPoint = gmas[i];
                        gmas[i] = gmas[i - 1];
                        gmas[i - 1] = LastPoint;
                        i = 0; // заменяли только эту строчку
                    }
    
                }
                return gmas;
            }
        }

    Всем удачи и будьте внимательнее.
    Ответ написан
  • Пропадает звук на ноутбуке. Куда копать?

    drsmoll
    @drsmoll
    Это Я.
    микротрещину так и не заметишь, пробуйте вызванивать цепь прохождения сигнала и управления.
    Ответ написан
    Комментировать
  • Пропадает звук на ноутбуке. Куда копать?

    @Fixid
    Ищите аудио чип, возможен отвал. Надо будет прогреть с флюсом
    Ответ написан
    2 комментария
  • Как сделать наследование от нескольких классов в C#?

    @Neonoviiwolf
    Flutter developer
    Невозможно, используйте интерфейсы и композицию
    Ответ написан
    Комментировать
  • Как высчитать недели между 2мя датами на C#?

    Shwed_Berlin
    @Shwed_Berlin
    .net Software Developer
    1. Вычисляем номер недели для первой и второй даты.
    2. Для всех недель между первой и второй выдаем первый день недели и последний (или все дни недели, смотря что нужно).
    3. Для каждого обьекта проверяем была ли смена месяца, если да - делим объект на два.

    Это если в общем.
    Ответ написан
    Комментировать
  • Vue.js как правильно написать hello world?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Точно подключилось? В консоли ошибок нет? Кстати, на jsfiddle скрипт выполняется после загрузки (в событии onload), а у вас вне. Попробуйте написать что-то вроде
    window.onload = function() {
        new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue.js!'
            }
        });
    }
    Ответ написан
    9 комментариев
  • Unity3D API - как выучить?

    arct_AG
    @arct_AG
    (RUS)
    Введение в программирование игр на Unity
    www.microsoftvirtualacademy.com/training-courses/i...
    Больше информации на сайте: www.microsoftvirtualacademy.com
    (EN)
    Ultimate GameDev Tutorials :
    https://www.youtube.com/playlist?list=PLfAMZpOjTmp...
    Также хорошие источники уроков находятся здесь:
    www.walkerboystudio.com/wbstudio/learn-unity
    www.lynda.com
    Ответ написан
    1 комментарий
  • Почему не работает событие (C#)?

    AxisPod
    @AxisPod
    C# это не PHP, тупо начать писать не прочитав ни одной книги не получится.
    Ответ написан
    6 комментариев
  • Как я могу создать такой текст с таким бордером?

    Defman21
    @Defman21
    Как вариант:
    <div id="block"><span id="text">Frontable</span></div>

    div#block {
      padding: 10px 0;
      box-shadow: inset 0 0 0px 3px red;
    }
    div#block #text {
      width: 100%;
      background: #fff;
      display: block
    }
    Ответ написан
    Комментировать
  • Какие требования у.NET при стандартной сериализации?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Чтобы класс можно было сериализовать, необходимо пометить его атрибутом [Serializable].
    [Serializable]
    public class MyClass 
    {
    }

    Атрибут [Serializable] также должны иметь все типы, которые включены в класс. Если у какого-то из типов не будет этого атрибута, то при попытке выполнить сериализацию, возникнет исключение. Это минимум, что необходимо.

    Для двоичной сериализации используется класс BinaryFormatter.
    // данные, которые будем сериализовать
    var data = new List<int> { 1, 2, 3 };
    
    // выполняем сериализацию 
    // в MemoryStream (можно в любой Stream)
    var bf = new BinaryFormatter();
    var m = new MemoryStream();
    bf.Serialize(m, data);
                
    // курсор потока переводим в начало, т.к. мы работали с потоком выше
    // если открывать новый поток, то это делать не обязательно
    m.Position = 0;
    // выполняем десериализацию данных из MemoryStream
    var result = (List<int>)bf.Deserialize(m);
    
    // выводим результат в консоль
    result.ForEach(itm => Console.WriteLine(itm));


    Если в объекте попадется тип, который не помечен атрибутом [Serializable], то можно реализовать в классе интерфейс ISerializable. Либо сделать для этого типа отдельный класс, реализующий интерфейс ISerializable. При этом, не забывая про атрибут [Serializable], который обязательно должен присутствовать.

    При реализации интерфейса ISerializable, в классе нужно определит метод GetObjectData, который будет подготавливать данные для сериализации. А также реализовать перегрузку конструктора для принятия сериализованных данных.
    public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
    {
      if (info == null)
      {
        throw new ArgumentNullException("info");
      }
      info.AddValue("Ключ", "Значение");
      info.AddValue("Ключ2", this.ИмяСвойства); 
      // и т.д.
    }
    
    // конструктор
    protected ИмяКласса(SerializationInfo info, StreamingContext context)
    {
      if (info == null)
      {
        throw new ArgumentNullException("info");
      }
      this.Свойство = info.GetValue("Ключ", typeof(типДанных));
      this.ИмяСвойства = (string)info.GetValue("Ключ2", typeof(string));
      // и т.д.
    }

    Часто спрашивают, как сериализовать Dictionary<TKey, TValue>. На основе всего выше изложенного, можно сделать вот такой класс:
    [Serializable]
    public class MyDictionary : Dictionary<string, object>, ISerializable
    {
    
      public MyDictionary() { }
    
      protected MyDictionary(SerializationInfo info, StreamingContext context)
      {
        if (info == null)
        {
          throw new ArgumentNullException("info");
        }
        int count = info.GetInt32("Count"); // получаем число элементов
        for (int i = 0; i < count; i++) // перебираем элементы
        {
          // получаем ключ и значение по индексу элемента
          string key = info.GetString(String.Format("ItemKey{0}", i));
          object value = info.GetValue(String.Format("ItemValue{0}", i), typeof(object));
          // добавляем элемент в себя
          this.Add(key, value);
        }
      }
    
      public void GetObjectData(SerializationInfo info, StreamingContext context)
      {
        if (info == null)
        {
          throw new ArgumentNullException("info");
        }
        // перебираем все элементы коллекции
        int i = 0;
        foreach (KeyValuePair<string, object> item in this)
        {
          // добавляем отдельно ключ и значение
          info.AddValue(String.Format("ItemKey{0}", i), item.Key, typeof(string));
          info.AddValue(String.Format("ItemValue{0}", i), item.Value);
          i++;
        }
        // запоминаем, сколько всего элементов
        info.AddValue("Count", this.Count);
      }
    }

    Пример использования:
    // выполняем сериализацию коллекции
    var data = new MyDictionary();
    data.Add("Key", "Value");
    data.Add("Key2", "Value2");
    data.Add("Key3", 123);
    
    var bf = new BinaryFormatter();
    var m = new MemoryStream();
    bf.Serialize(m, data);
    
    // выполняем десериализацию
    m.Position = 0;
    var result = (MyDictionary)bf.Deserialize(m);
    
    // выводим результат
    foreach (var item in result)
    {
      Console.WriteLine("{0} = {1}", item.Key, item.Value);
    }

    Посмотреть в .NET Fiddle, как это работает.
    Ответ написан
    Комментировать
  • Разве StringWriter унаследован от Stream?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Метод Serialize перегружен и, помимо прочего, может принимать TextWriter, от которого наследуется StringWriter.
    Ответ написан
    Комментировать
  • Что за страности в Stream в.NET?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    ReadByte возвращает тип int, т.к. при достижении конца будет возвращено значение минус один. А тип byte может иметь значение в диапазоне от нуля до 255. То есть, считывая байты, сообщить о достижении конца потока при помощи типа byte невозможно (байт, имеющий значение ноль может быть полезным байтом), поэтому используется тип int.

    Метод Read принимает буфер, в который будут помещены считанные данные. Буфер - это массив байт. Изначально он должен быть пустым. Размер массива - по своему смотрению. Чем больше размер буфера, тем больше данных будет помещено в память, меньше проделано операций.

    Метод Read возвращает число помещенных в буфер байт. Ноль - достигнут конец потока.

    FileInfo f = new FileInfo(@"C:\example.dat");
    using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
     using (BinaryReader br = new BinaryReader(fs))
     {
       int bytesRead = 0;
       byte[] buffer = new byte[256]; // размер буфера 256 единиц байт
       StringBuilder result = new StringBuilder();
       while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) // читаем не более 256 единиц байт в buffer
       {
         // из buffer следует извлекать не более bytesRead (в конце это число может быть меньше 255)
       }
     }
    }

    Массивы являются ссылочными типами и нет необходимости использовать out.
    Ответ написан
    3 комментария
  • Почему в методе alert можно опустить объект document, а в методе write нет?

    nalomenko
    @nalomenko
    Руководитель отдела разработок в студии «Lava»
    Потому-что alert — это метод глобального объекта window, внутри которого Вы работаете, даже не указывая ссылку на него. А write — метод объекта document, который находится внутри объекта window.
    Ответ написан
    Комментировать
  • C# Как из другого потока обновить control на форме?

    @gleb_kudr
    Ну, например так:

    // some background thread code
    Form1.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(delegate()
                {
                    label1.Content="invoked from background thread";
                }));


    Т.е. мы берем элемент UI, у него берем диспатчер и в этом диспатчере делаем инвокейшн процедуры. Можно еще использовать статический Application.Current.Dispatcher.
    Ответ написан
    Комментировать