?? null or 0
От: Аноним  
Дата: 28.06.13 05:15
Оценка:
привет.
хотелось бы знать

object r = null;
var tt = r ?? 5;

данная конструкция всем понятна,но есть ли такое же красивое решение, не в случае когда r == null тогда 5,
а если r == 0 тогда 5.

можно ли написать каким либо образом подобное расширение без тернарных условий
Re: ?? null or 0
От: xednay89 Россия  
Дата: 28.06.13 05:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>привет.

А>хотелось бы знать

А>
А>object r = null;
А>var tt = r ?? 5;
А>

А>данная конструкция всем понятна,но есть ли такое же красивое решение, не в случае когда r == null тогда 5,
А>а если r == 0 тогда 5.

А>можно ли написать каким либо образом подобное расширение без тернарных условий


нет.
А чем вам тернарное условие не нравится?
Re[2]: ?? null or 0
От: Аноним  
Дата: 28.06.13 05:24
Оценка:
Здравствуйте, xednay89, Вы писали:

X>Здравствуйте, Аноним, Вы писали:


А>>привет.

А>>хотелось бы знать

А>>
А>>object r = null;
А>>var tt = r ?? 5;
А>>

А>>данная конструкция всем понятна,но есть ли такое же красивое решение, не в случае когда r == null тогда 5,
А>>а если r == 0 тогда 5.

А>>можно ли написать каким либо образом подобное расширение без тернарных условий


X>нет.

X>А чем вам тернарное условие не нравится?


var maxThreadCount = (UserListList.Active.Count > 0? UserListList.Active.Count : 1);
//или
var i = UserListList.Active.Count;
var maxThreadCount = (i > 0? i : 1);


а если таких мест много аналогичных, то не красиво код смотрится


var maxThreadCount = UserListList.Active.Count ?? 1;
//так бы было приятнее
Re[3]: ?? null or 0
От: xednay89 Россия  
Дата: 28.06.13 05:30
Оценка: 1 (1) +1
X>>Здравствуйте, Аноним, Вы писали:

А>а если таких мест много аналогичных, то не красиво код смотрится



А>
А>var maxThreadCount = UserListList.Active.Count ?? 1;
А>//так бы было приятнее
А>


Ну если таким мест действительно много, что можно сделать метод расширения, чтобы выглядело примерно так:

var maxThreadCount = UserListList.Active.Count.NonZero();
Re[4]: ?? null or 0
От: xednay89 Россия  
Дата: 28.06.13 05:33
Оценка:
Здравствуйте, xednay89, Вы писали:

точнее вот так
X>
X>var maxThreadCount = UserListList.Active.Count.InsteadOfZero(1);
X>
Re[4]: ?? null or 0
От: Аноним  
Дата: 28.06.13 05:35
Оценка:
Здравствуйте, xednay89, Вы писали:

X>>>Здравствуйте, Аноним, Вы писали:


А>>а если таких мест много аналогичных, то не красиво код смотрится



А>>
А>>var maxThreadCount = UserListList.Active.Count ?? 1;
А>>//так бы было приятнее
А>>


X>Ну если таким мест действительно много, что можно сделать метод расширения, чтобы выглядело примерно так:


X>
X>var maxThreadCount = UserListList.Active.Count.NonZero();
X>


так и написал,спасибо за совет
  public static class MyExtensions
    {
        public static int NonZero(this int a)
        {
            return a > 0 ? a : 1;
        }
    }
Re[3]: ?? null or 0
От: Muxa  
Дата: 28.06.13 06:05
Оценка: +1
А>
А>var maxThreadCount = (UserListList.Active.Count > 0? UserListList.Active.Count : 1);
А>//или
А>var i = UserListList.Active.Count;
А>var maxThreadCount = (i > 0? i : 1);
А>


А>а если таких мест много аналогичных, то не красиво код смотрится


я бы написал так:
maxThreadCount = Max( 1, UserListList.Active.Count );
Re[5]: ?? null or 0
От: Doc Россия http://andrey.moveax.ru
Дата: 28.06.13 06:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>так и написал,спасибо за совет

А>
public static int NonZero(this int a)


IMHO не удачный вариант. Я бы сделал расширение по второму варианту
public static int NonZeroOrSpecified(this int value, int specified)
{
    return value > 0 ? value : specified; 
}


Гибче и читабельнее в коде.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.