Я бы сказал, что нет. Но это зависит от того, что мы действительно говорим о поле, в отличие от объекта, который может (хотя это определенно не должно) демонстрировать различное поведение в двух фрагментах, которые вы включили (т. Е. является логикой с побочными эффектами в геттере). не
Update: Если вы говорите о потере производительности, там практически нет разностной но Я считаю, что назначение все так немного дешевле (чем чтение значения). Вот пример программы, чтобы продемонстрировать это:
bool b = false;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
b = true;
}
sw.Stop();
TimeSpan setNoCheckTime = sw.Elapsed;
sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
// This part will never assign, as b will always be true.
if (!b)
{
b = true;
}
}
sw.Stop();
TimeSpan checkSetTime = sw.Elapsed;
Console.WriteLine("Assignment: {0} ms", setNoCheckTime.TotalMilliseconds);
Console.WriteLine("Read: {0} ms", checkSetTime.TotalMilliseconds);
Выход на моей машине:
Assignment: 2749.6285 ms
Read: 4543.0343 ms
Я согласен с вами, я уверен, что это ничтожно! Серьезно, хотя вопрос гораздо более интересный, который более ясен и так легче поддерживать. –
, и что касается вашего фактического вопроса, два разных пути в версии с if будут занимать разные времена, поэтому вы не можете ответить, не зная вероятности появления каждого пути. Это говорит, что мне будет трудно поверить, что обычное безусловное задание будет избито. –
Если у меня есть такая проблема, я буду использовать первого, кто заботится о производительности в этом случае, это ваше соглашение. –