В первом примере 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; }
}