C# - Как я определяю встроенный метод Func <T> в качестве параметра?

[g0] Для пользователей OSX: [/g0] [g1] Для установки Memcached выполните следующую команду: [/g1] ob_
9
задан tags2k 1 October 2008 в 09:00
поделиться

3 ответа

Так как это - func, лямбда была бы самым простым путем:

Foo foo = GetItem<Foo>("abc", () => new Foo("blah"));

Где [новый Foo ("вздор")] является func, который вызывается как значение по умолчанию.

Вы могли также упростить до:

return ((T)HttpContext.Current.Session[key]) ?? defaultValue();

Где?? объединяющий пустой указатель оператор - если первый аргумент является непустым, он возвращается; иначе правая рука оценена и возвращена (таким образом, defaultValue () не вызывается, если объект не пустой).

Наконец, если Вы просто хотите использовать конструктора по умолчанию, затем Вы могли бы добавить "новый ()" ограничение:

public static T GetItem<T>(string key)
    where T : new()
{
    return ((T)HttpContext.Current.Session[key]) ?? new T();
}

Это все еще лениво - новое () только используется, если объект был пустым.

16
ответ дан 4 December 2019 в 11:09
поделиться
var log = SessionItem.GetItem("logger", () => NullLog.Instance)

Отметьте, чем обычно Вы может пропустить спецификацию {T} в вызове GetItem {T} (если Func {T} возвращает объект того же типа),

1
ответ дан 4 December 2019 в 11:09
поделиться

Почему Вы не передаете значение по умолчанию непосредственно? Какое использование является функтором?

Между прочим, defaultValue.Invoke() является довольно подробным. Также возможно просто записать defaultValue().

2
ответ дан 4 December 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: