Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (12)

Лучшие ответы пользователя

Все ответы (13)
  • Почему из буфера обмена возвращается пустота?

    Поддерживаю предыдущего оратора. Нужно сериализовать объект в поток байт (или xml) перед помещением в буфер и десериализовать после.
    Ответ написан
    Комментировать
  • Как реализовать смену цвета текста по заданным промежуткам времени?

    Хоть я и не настоящий сварщик, могу посоветовать следующее: соберите все интервалы в какую-то таблицу или словарь, и потом в отдельном методе в цикле проверяйте попадание текущего времени в интервалы. Когда попадет, возвращайте из метода значение цвета.

    Примерно так:
    public class Interval
    {
        DateTime LeftBound { get; set; }
        DateTime RightBound { get; set; }
    
        public Interval(DateTime left, DateTime right)
        {
           LeftBound = left;
           RightBound = right;
        }
    }
    
    ...
    
    List<Interval> intervals = new List<Interval>
    {
        new Interval(DateTime.Parse("12:00:00"), DateTime.Parse("13:00:00")),
        new Interval(DateTime.Parse("14:00:00"), DateTime.Parse("20:00:00"))
    };
    
    ...
    
    public Color CheckInterval(DateTime now, List<Interval> timeTable)
    {
       Color color = Color.Green;
    
       foreach (Interval interval in timeTable)
       {
          if (now > interval.LeftBound && now < interval.RightBound) 
          {
             color = Color.Red;
             break;
          }
       }
    
       return color;
    }
    
    ...
    
    label1.ForeColor = CheckInterval(DateTime.Now, intervals);

    Соедините эти части вместе и должно получиться.
    Если кто поумнее предложит исправления — будет круто!
    Ответ написан
    5 комментариев
  • Куда копать, чтобы написать свой эквалайзер (визуализатор музыки) на C#?

    Попробуйте, коллега, NAudio.
    Вот инструкция по изготовлению Recording Level Meter
    Ответ написан
    Комментировать
  • Как сделать анимацию изображения при наведении курсора?

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

    В первом случае в байтовом массиве следующая строка (238 байт):
    \0\u0001\0\0\0ÿÿÿÿ\u0001\0\0\0\0\0\0\0\f\u0002\0\0\0<Test1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\u0005\u0001\0\0\0\fTest1.Artist\u0003\0\0\0\u001a<FirstName>k__BackingField\u0019<LastName>k__BackingField\u001a<SongTitle>k__BackingField\u0001\u0001\u0001\u0002\0\0\0\u0006\u0003\0\0\0\aMichael\u0006\u0004\0\0\0\aJackson\u0006\u0005\0\0\0\rGive In To Me\v"

    Если поменять автосвойства в классе Artist на полные,
    [Serializable]
    public class Artist
    {
        private string _firstName;
        private string _lastName;
        private string _songTitle;
    
        public string FirstName { get => _firstName; set => _firstName = value; }
        public string LastName { get => _lastName; set => _lastName = value; }
        public string SongTitle { get => _songTitle; set => _songTitle = value; }
    }
    размер станет меньше (190 байт) и строка поменяется соответственно:
    \0\u0001\0\0\0ÿÿÿÿ\u0001\0\0\0\0\0\0\0\f\u0002\0\0\0<Test1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\u0005\u0001\0\0\0\fTest1.Artist\u0003\0\0\0\n_firstName\t_lastName\n_songTitle\u0001\u0001\u0001\u0002\0\0\0\u0006\u0003\0\0\0\aMichael\u0006\u0004\0\0\0\aJackson\u0006\u0005\0\0\0\rGive In To Me\v

    Во втором же случае (раздельная запись каждого свойства) эта строка выглядит так (30 байт):
    \aMichael\aJackson\rGive In To Me

    В этом мне помог глупый метод:
    private static string BytesToString(byte[] bytes)
    {
    	char[] chars =  Encoding.UTF7.GetString(bytes).ToCharArray();
    	StringBuilder result = new StringBuilder();
    	foreach (char c in chars) { result.Append(c); }
    	return result.ToString();
    }

    Какие мы можем сделать выводы из всего этого?

    Первый: при сериализации объекта помимо значений свойств записывается еще и структура самого объекта, названия полей, имя и версия сборки и все в таком духе (причем, как можно видеть, в случае с автосвойствами весь этот оверхед больше). К тому же автосвойства не подходят для сериализации и десериализации, в разных сборках их фактические имена будут отличаться. Во втором случае вы записываете просто значения трех строк без структуры.

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

Лучшие вопросы пользователя

Все вопросы (5)