В некотором классе интенсивно используется объект а, теперь появилась вероятность того, что этот объект может быть null. Можно ли как-то красиво решить эту задачу не вставляя перед каждым обращением к объекту if(a!=null).
Здравствуйте, winston, Вы писали:
W>В некотором классе интенсивно используется объект а, теперь появилась вероятность того, что этот объект может быть null. Можно ли как-то красиво решить эту задачу не вставляя перед каждым обращением к объекту if(a!=null).
public static class Extensions
{
public static void SafeSome(this A obj)
{
if (obj != null)
obj.Some();
}
}
....
obj.SafeSome();
При желании можно написать генерик-версию типа SafeFunc()
Здравствуйте, winston, Вы писали:
W>В некотором классе интенсивно используется объект а, теперь появилась вероятность того, что этот объект может быть null. Можно ли как-то красиво решить эту задачу не вставляя перед каждым обращением к объекту if(a!=null).
Паттерн есть для этого. Правда название не помню, а гуглить лень.
Здравствуйте, winston, Вы писали:
W>Функция не обязательно some(), вызываются разные методы этого объекта.
1. Читаем про аспекты, ищем/пишем аспект NotNull.
2. Если количество методов невелико, пишем достаточное кол-во заглушек.
3. Generic variant:
public static class Extensions
{
public static void SafeAction<T>(T obj, Action<T> action) where T: class
{
if (obj != null)
action(T);
}
}
....
obj.SafeAction(x => x.some());
....
Здравствуйте, irbis3003, Вы писали:
I>Паттерн есть для этого. Правда название не помню, а гуглить лень.
Никогда не понимал цель таких ответов. То ли вы хотите чтоб я порылся во всех паттернах, то ли чтобы я поуговаривал вас поискать. Ибо информационная ценность этого ответа стремится к нулю.
W>В некотором классе интенсивно используется объект а, теперь появилась вероятность того, что этот объект может быть null. Можно ли как-то красиво решить эту задачу не вставляя перед каждым обращением к объекту if(a!=null).
А объект а это поле класса?
если да — сделай свойство:
private A A {
get { return _a ?? _a = new DummyA(); }
}
// ...
A.Some();
Здравствуйте, winston, Вы писали:
W>Никогда не понимал цель таких ответов. То ли вы хотите чтоб я порылся во всех паттернах, то ли чтобы я поуговаривал вас поискать. Ибо информационная ценность этого ответа стремится к нулю.
NullObject паттерн. Набрал-таки в поисковике ("паттерн проверки нулевого объекта") и нашел. Думаю гугл у меня работает так же, как и у Вас, было бы желание.
Здравствуйте, irbis3003, Вы писали:
I>Здравствуйте, winston, Вы писали:
W>>Никогда не понимал цель таких ответов. То ли вы хотите чтоб я порылся во всех паттернах, то ли чтобы я поуговаривал вас поискать. Ибо информационная ценность этого ответа стремится к нулю.
I>NullObject паттерн. Набрал-таки в поисковике ("паттерн проверки нулевого объекта") и нашел. Думаю гугл у меня работает так же, как и у Вас, было бы желание.
Кого волнует название паттерна, без ссылки на пример или на поисковый запрос в гугле?
Здравствуйте, irbis3003, Вы писали:
I>Здравствуйте, Aen Sidhe, Вы писали:
AS>>Кого волнует название паттерна, без ссылки на пример или на поисковый запрос в гугле?
I>Давайте исходник, я еще и реализацию воткну. Раз названия мало, а самому найти пример в нэте Вам карма не позваляет.
Выше я дал два примера, которые подойдут к любому исходнику, а товарищ Qrystal дал ссылку на описание вашего "паттерна" с реализацией.
Я же, когда мне лениво писать, даю ссылку на поисковый запрос, если ответ там в первой ссылке. Что гораздо полезнее ваших разглагольствований, поскольку:
1. Показывает человеку, что проблема проста и решается гуглом.
2. Даёт человеку ссылку на ответ.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, achmed, Вы писали:
A>>Досадно что нельзя value типы использовать,
AVK>Имеешь в виду nullable типы?