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

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

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

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

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

textual
Листинг программы
using System;
using System.Diagnostics;
 
namespace ConsoleApplication18
{
    class Test
    {
        public object Tag { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            const int n = 1000*1000;
            var test = new Test();
            bool trash;
            var sw = Stopwatch.StartNew();
            for (int i = 0; i < n; i++)
            {
                trash = test.Tag != null ? (bool) test.Tag : false;
                test.Tag = !trash;
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);
            trash = (bool) test.Tag;
            GC.KeepAlive(trash);
 
            test = new Test();
            bool? nullabletrash = null;
            var sw2 = Stopwatch.StartNew();
            for (int i = 0; i < n; i++)
            {
                nullabletrash = (bool?) (test.Tag ?? (test.Tag = new bool?(false)));
                test.Tag = !nullabletrash;
            }
            sw2.Stop();
            Console.WriteLine(sw2.Elapsed);
            GC.KeepAlive(nullabletrash);
        }
    }
}

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


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

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

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