C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 09:50
Оценка: 55 (3) -1
//
// Warning:
//
//   -|
//   -|
//   -|===============================
//   -|
//   -|
//
class Problem
{
    static void foo(params object[] ps)
    {
        System.Console.WriteLine("got {0} parameters for great good", ps.Length);
    }

    public static void Main()
    {
        foo(null, null, null, null);
        foo(null, null, null);
        foo(null, null);
        foo(null); // HUH WHAT THE HELL
        foo();
    }
}
Re: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 09:57
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>class Problem
Кё>{
Кё>    static void foo(params object[] ps)
Кё>    {
Кё>        System.Console.WriteLine("got {0} parameters for great good", ps.Length);
Кё>    }

Кё>    public static void Main()
Кё>    {
Кё>        foo(null, null, null, null);
Кё>        foo(null, null, null);
Кё>        foo(null, null);
Кё>        foo(null); // HUH WHAT THE HELL
Кё>        foo();
Кё>    }
Кё>}


Что лишний раз напоминает о том, что параметры следует проверять на null Чего ужасного-то "params" — это всего лишь атрибут для компилятора. Ничего удивительного.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 10:09
Оценка: +1
Здравствуйте, _FRED_, Вы писали:

_FR>Что лишний раз напоминает о том, что параметры следует проверять на null Чего ужасного-то "params" — это всего лишь атрибут для компилятора. Ничего удивительного.


Ответы специалистов, кстати, в первом же результате поиска
Help will always be given at Hogwarts to those who ask for it.
Re: C# params keyword and null problem
От: SergASh  
Дата: 29.10.10 10:14
Оценка:
Человек семь лет на RSDN и не научился формулировать вопросы. Чего спросить-то хотелось?
Re[2]: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 10:20
Оценка: +1
Здравствуйте, SergASh, Вы писали:

SAS>Человек семь лет на RSDN и не научился формулировать вопросы. Чего спросить-то хотелось?


Не спросить, а показать — что гораздо ценнее.

Вот только прежде чем показать что-то новое полезно поискать и убедиться, что оно действительно новое. А так — боян
Help will always be given at Hogwarts to those who ask for it.
Re: C# params keyword and null problem
От: Lloyd Россия  
Дата: 29.10.10 10:23
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Делаем вот так:
object obj = null;
foo(obj); // HUH WHAT THE HELL

и становится еще смешнее.
Re[3]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 10:26
Оценка: +1
Здравствуйте, _FRED_, Вы писали:

_FR>Ответы специалистов, кстати, в первом же результате поиска


Косяк дизайна языка я считаю. Надо было потребовать писать params, если программист хочет передать все параметры одним массивом:

object[] x = new object[] { "fred", "he", "is", "not", "null" };

foo(params x) // ps: x (5 параметров-строк)
foo(x) // ps: object[] { x } (один параметр-массив)


Как в Python:

def foo(*ps):
    print(len(ps), len(ps[0]) if len(ps) > 0 else '*')

x = ["fred", "he", "is", "not", "null"]

foo(x, x, x) # 3 5
foo(x, x)    # 2 5
foo(x)       # 1 5
foo()        # 0 *

foo(*x) # 5 4
Re[2]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 10:28
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Человек семь лет на RSDN и не научился формулировать вопросы. Чего спросить-то хотелось?


Ничего, это не вопрос. Бывает в жизни и такое.
Re[4]: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 10:39
Оценка:
Здравствуйте, Кодёнок, Вы писали:

_FR>>Ответы специалистов, кстати, в первом же результате поиска

Кё>Косяк дизайна языка я считаю. Надо было потребовать писать params, если программист хочет передать все параметры одним массивом:
Кё>object[] x = new object[] { "fred", "he", "is", "not", "null" };

Кё>foo(params x) // ps: x (5 параметров-строк)
Кё>foo(x) // ps: object[] { x } (один параметр-массив)


Ну а ИМХЕ больше кажется подходящим имеющийся вариант, любезно разобранный по косточкам здесь
Автор: nikov
Дата: 07.12.07
.
Help will always be given at Hogwarts to those who ask for it.
Re[5]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 11:02
Оценка: +1 -1 :)
Здравствуйте, _FRED_, Вы писали:

_FR>Ну а ИМХЕ больше кажется подходящим имеющийся вариант, любезно разобранный по косточкам здесь
Автор: nikov
Дата: 07.12.07
.


Искренне желаю тебе однажды купить микроволновку, где одно нажатие выставляет 10 секунд х 900 Вт, два нажатия — включают гриль на два часа, три нажатия — 30 секунд х 900 Вт, четыре — 40, и так далее.
Re[6]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 11:02
Оценка: :)
Здравствуйте, Кодёнок, Вы писали:

Кё>Искренне желаю тебе однажды купить микроволновку, где одно нажатие выставляет 10 секунд х 900 Вт, два нажатия — включают гриль на два часа, три нажатия — 30 секунд х 900 Вт, четыре — 40, и так далее.


Нет, не купить, а получить в подарок от жены. На 25 лет свадьбы. Так, чтобы не отвертелся
Re[6]: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 11:14
Оценка:
Здравствуйте, Кодёнок, Вы писали:

_FR>>Ну а ИМХЕ больше кажется подходящим имеющийся вариант, любезно разобранный по косточкам здесь
Автор: nikov
Дата: 07.12.07
.


Кё>Искренне желаю тебе однажды купить микроволновку, где одно нажатие выставляет 10 секунд х 900 Вт, два нажатия — включают гриль на два часа, три нажатия — 30 секунд х 900 Вт, четыре — 40, и так далее.


А попробовать объяснить, что в существующем варианте плохо и чем же предложенный вариант лучше не желаете?
Help will always be given at Hogwarts to those who ask for it.
Re[7]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 11:18
Оценка:
Здравствуйте, _FRED_, Вы писали:

Кё>>Искренне желаю тебе однажды купить микроволновку, где одно нажатие выставляет 10 секунд х 900 Вт, два нажатия — включают гриль на два часа, три нажатия — 30 секунд х 900 Вт, четыре — 40, и так далее.


_FR>А попробовать объяснить, что в существующем варианте плохо и чем же предложенный вариант лучше не желаете?


Я не умею такие вещи объяснять. Что плохого в микроволновке из примера? Просто вижу что плохо, вот и все.
Re[8]: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 11:31
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>>>Искренне желаю тебе однажды купить микроволновку, где одно нажатие выставляет 10 секунд х 900 Вт, два нажатия — включают гриль на два часа, три нажатия — 30 секунд х 900 Вт, четыре — 40, и так далее.

_FR>>А попробовать объяснить, что в существующем варианте плохо и чем же предложенный вариант лучше не желаете?
Кё>Я не умею такие вещи объяснять. Что плохого в микроволновке из примера? Просто вижу что плохо, вот и все.

На а объяснить что общего у приведённой аналогии и обсуждаемого вопроса можно?

Мне, кстати, нужна микроволновка, у которой не сбрасываются часы при отключении электричества.
Help will always be given at Hogwarts to those who ask for it.
Re[9]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 12:08
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>На а объяснить что общего у приведённой аналогии и обсуждаемого вопроса можно?


Что общего между:

foo() -> ноль слонят
foo(x) -> попугай
foo(x, x) -> два слоненка
foo(x, x, x) -> три слоненка

и

одно нажатие -> один слоненок
два нажатия -> попугай
три нажатия -> три слоненка
четыре нажатия -> четыре слоненка

Это надо объяснять?
Re[10]: C# params keyword and null problem
От: LF  
Дата: 29.10.10 12:12
Оценка:
Кё>Что общего между:

Кё>foo() -> ноль слонят

Кё>foo(x) -> попугай
Кё>foo(x, x) -> два слоненка
Кё>foo(x, x, x) -> три слоненка

Кё>и


Кё>одно нажатие -> один слоненок

Кё>два нажатия -> попугай
Кё>три нажатия -> три слоненка
Кё>четыре нажатия -> четыре слоненка

Кё>Это надо объяснять?


Это из разряда полупустой стакан равен полуполному, тогда пустой стакан равен полному.
Re[11]: C# params keyword and null problem
От: Кодёнок  
Дата: 29.10.10 12:27
Оценка:
Здравствуйте, LF, Вы писали:

LF>Это из разряда полупустой стакан равен полуполному, тогда пустой стакан равен полному.


Куда там. Мы пока что застряли на стадии “сам видишь, что и в первом и во втором есть приставка полу-, или надо объяснять?”
Re[10]: C# params keyword and null problem
От: _FRED_ Черногория
Дата: 29.10.10 12:28
Оценка:
Здравствуйте, Кодёнок, Вы писали:

_FR>>На а объяснить что общего у приведённой аналогии и обсуждаемого вопроса можно?


Кё>Что общего между:

Кё>foo() -> ноль слонят
Кё>foo(x) -> попугай
Кё>foo(x, x) -> два слоненка
Кё>foo(x, x, x) -> три слоненка
Кё>и
Кё>одно нажатие -> один слоненок
Кё>два нажатия -> попугай
Кё>три нажатия -> три слоненка
Кё>четыре нажатия -> четыре слоненка
Кё>Это надо объяснять?

Конечно. Потому что далеко не каждый
Кё>foo(x) -> попугай
а лишь при стечении некоторых обстоятельств.
using System.Diagnostics;

static class Program
{
  static void Main() {
    Test();
    Test(0); // Никакой не "попугай", не разводите напраслину, учите матчасть
    Test(0, 1);
    Test(0, 1, 2, 3);
    Test(null); // А вот тут очень ясно, что будет происходить
  }

  static void Test(params int[] values) {
    if(values == null) {
      Debug.Print("values == null");
    } else {
      Debug.Print("values.Length == {0}", values.Length);
    }//if
  }
}


А то, что в некоторых режимах кнопки выполняют не совсем те роли, которые выполняют в привычных условиях — обычное дело.
Help will always be given at Hogwarts to those who ask for it.
Re[9]: [Offtop] микроволновка
От: Spiceman  
Дата: 29.10.10 12:31
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Мне, кстати, нужна микроволновка, у которой не сбрасываются часы при отключении электричества.

Offtop: А зачем часы в микроволновке? Нет часов — нет проблемы.
Re[10]: [Offtop] микроволновка
От: _FRED_ Черногория
Дата: 29.10.10 12:40
Оценка:
Здравствуйте, Spiceman, Вы писали:

_FR>>Мне, кстати, нужна микроволновка, у которой не сбрасываются часы при отключении электричества.

S>Offtop: А зачем часы в микроволновке? Нет часов — нет проблемы.

У меня на кухне из часов только микроволновка Удобно — пока готовишь, голову не надо вертеть, что бы на часы посмотреть — над головой-то полки да шкафчики, туда часы не повесишь. А лепестричество вырубается днём в рабочие часы не редко
Help will always be given at Hogwarts to those who ask for it.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.