Ответ 1
В первом примере LoadSearchList() будет вызываться каждый раз при доступе к ресурсу.
Во втором, LoadSearchList() будет вызываться только один раз (но он будет вызываться, используете ли вы его или нет, так как теперь это поле, а не свойство).
Лучшим вариантом может быть:
private static IEnumerable<string> _searchWordList;
public static IEnumerable<string> SearchWordList
{
get
{
return _searchWordList ??
( _searchWordList = DataTools.LoadSearchList());
}
}
Или, если вы используете .NET 4.0 и хотите что-то потокобезопасное, вы можете использовать Lazy<T>
, как упоминал Джон Скит (я думаю, что синтаксис должен быть правильным, но не держите меня в этом):
private static Lazy<IEnumerable<string>> _searchWordList =
new Lazy<IEnumerable<string>>(() => DataTools.LoadSearchList());
public static IEnumerable<string> SearchWordList
{
get { return _searchWordList.Value; }
}