2013-07-30 2 views
5

Я разрабатываю приложение, используя C# (5.0) .Net (4.5). Я хочу знать, в чем разница между ниже, чем объявление переменной словаря. 1.Разница между определением словаря

var emailtemplateValues = new Dictionary<string, object> 
    { 
     {"CreatorName", creatorUserInfo.UserName}, 
     {"ProjectName", masterProjectInfo.Title}, 
     {"Reason", reason} 
    }; 

и 2.

var emailtemplateValues = new Dictionary<string, object>() 
    { 
     {"CreatorName", creatorUserInfo.UserName}, 
     {"ProjectName", masterProjectInfo.Title}, 
     {"Reason", reason} 
    }; 

во 2 декларации я использовал () после Dictionary<string, object>. оба синтаксиса прекрасно работают, но просто хотят узнать о внутренней работе.

ответ

9

Эти два синтаксиса эквивалентны. Когда вызов конструктора опускается из выражения инициализатора, тогда компилятор попытается связать с безпараллельным конструктором такой тип. Это описано в разделе 7.5.10.1 спецификации C#

Выражение создания объекта может опускать список аргументов конструктора и заключать круглые скобки при условии, что он включает инициализатор объекта или инициализатор коллекции. Опускание списка аргументов конструктора и заключенных круглых скобок эквивалентно заданию пустого списка аргументов.

+0

Есть ли разница в производительности между двумя синтаксисами? –

+0

Не должно быть никакой разницы. Даже если, тогда это должно быть незначительным. А также приложение работает лучше благодаря структуре и дизайну приложения, и эти вещи можно игнорировать, если хотите. – Sandy

+0

Я ценю ваше объяснение, но что такое незначительная производительность. ведь комбинация пренебрежимо малой производительности создает большую деградацию в развитии. –

5

Ничего. При использовании синтаксиса инициализатора вы можете опустить скобки. Это эквивалентно вызову конструктора без параметров. При компиляции они будут создавать точно такой же байт-код.

1

Нет никакой разницы после обработки компилятором выходного кода.

Смежные вопросы