В то время как я полностью понимаю предпочтение стиля и выбранную конкатенацию для моего первого ответа частично на основе моего собственного предпочтения, часть моего решения была основана на мысли, что конкатенация будет быстрее. Так, из любопытства я протестировал его, и результаты колебались, специально для такой маленькой строки.
Используя следующий код:
System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();
var p = new { FirstName = "Bill", LastName = "Gates" };
s.Start();
Console.WriteLine("{0} {1}", p.FirstName, p.LastName);
s.Stop();
Console.WriteLine("Console.WriteLine(\"{0} {1}\", p.FirstName, p.LastName); took: " + s.ElapsedMilliseconds + "ms - " + s.ElapsedTicks + " ticks");
s.Reset();
s.Start();
Console.WriteLine(p.FirstName + " " + p.LastName);
s.Stop();
Console.WriteLine("Console.WriteLine(p.FirstName + \" \" + p.LastName); took: " + s.ElapsedMilliseconds + "ms - " + s.ElapsedTicks + " ticks");
я получил следующие результаты:
Bill Gates
Console.WriteLine("{0} {1}", p.FirstName, p.LastName); took: 2ms - 7280 ticks
Bill Gates
Console.WriteLine(p.FirstName + " " + p.LastName); took: 0ms - 67 ticks
Используя метод форматирования более чем в 100 раз медленнее!! Конкатенация даже не зарегистрировалась как 1 мс, который является, почему я произвел галочки таймера также.
Вот ответ .
Основная причина Словарь выкидывает то, что нет "ошибки" значение, которое работает с любым V. Hashtable может возвращать null потому что ключ всегда является ссылкой введите.
Таким образом, не будет двусмысленности между тем, когда значение словаря [key] хранит нулевое значение, и когда ключ не существует. Hashtable [key] вернет null, если он хранит null или ключ не существует.
Основная причина, по которой Dictionary выбрасывает - политическая - было несколько вариантов для сохранения эффективности и простоты использования. Фактически он предоставляет метод (TryGetValue), который ясно демонстрирует, что утверждения о предполагаемой «неспособности» вернуть разумное значение являются ложными. Однако TryGetValue заставляет явно неудобный синтаксис делать именно то, что индексатор мог бы сделать легко.
Шаблоны C # предоставляют простой способ создания отдельных реализаций для семантики ссылок и значений, а также есть два других средства для бесшовной обработки отсутствующих объектов с семантикой значений, которые используются tempates и некоторыми операторами (по умолчанию и допускающими значение NULL). Это означает, что не было рациональной причины нарушать семантику хеш-таблицы.
Это долгая политическая борьба между академическим понятием коллекции, которое настаивает на том, что каждый должен пройти проверку «есть ли у вас», и реальным фактом, что такая искусственная процедура неэффективна и нарушает безопасность потоков - в принципе ( он нарушает потокобезопасность других безопасных реализаций, делая доступ неатомарным).