Имеет ли смысл присваивать Nullable свойству Tag любого элемента управления - C#

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. private void LeftDoorOpenCloseButton_Click(object sender, RoutedEventArgs e)
  2. {
  3. Duration duration = new Duration(TimeSpan.FromMilliseconds(800d));
  4. if (!leftDoorImage.IsInitilizedPictures)
  5. leftDoorImage.InitImages(ContentManagerProvider.LeftDoorBitmaps);
  6. bool? opened = (bool?)(leftDoorImage.Tag ?? (leftDoorImage.Tag = new bool?(false)));
  7. if (opened == false)
  8. leftDoorImage.BeginAnimation(duration);
  9. else
  10. leftDoorImage.BeginAnimation(duration, reverse: true);
  11. leftDoorImage.Tag = !opened;
  12. }
Имеет ли смысл для избежания упаковки/распаковки?
Листинг программы
  1. bool? opened = (bool?)(leftDoorImage.Tag ?? (leftDoorImage.Tag = new bool?(false)));

Решение задачи: «Имеет ли смысл присваивать Nullable свойству Tag любого элемента управления»

textual
Листинг программы
  1. using System;
  2. using System.Diagnostics;
  3.  
  4. namespace ConsoleApplication18
  5. {
  6.     class Test
  7.     {
  8.         public object Tag { get; set; }
  9.     }
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             const int n = 1000*1000;
  15.             var test = new Test();
  16.             bool trash;
  17.             var sw = Stopwatch.StartNew();
  18.             for (int i = 0; i < n; i++)
  19.             {
  20.                 trash = test.Tag != null ? (bool) test.Tag : false;
  21.                 test.Tag = !trash;
  22.             }
  23.             sw.Stop();
  24.             Console.WriteLine(sw.Elapsed);
  25.             trash = (bool) test.Tag;
  26.             GC.KeepAlive(trash);
  27.  
  28.             test = new Test();
  29.             bool? nullabletrash = null;
  30.             var sw2 = Stopwatch.StartNew();
  31.             for (int i = 0; i < n; i++)
  32.             {
  33.                 nullabletrash = (bool?) (test.Tag ?? (test.Tag = new bool?(false)));
  34.                 test.Tag = !nullabletrash;
  35.             }
  36.             sw2.Stop();
  37.             Console.WriteLine(sw2.Elapsed);
  38.             GC.KeepAlive(nullabletrash);
  39.         }
  40.     }
  41. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут