Re[9]: C# params keyword and null problem
От: Кодёнок  
Дата: 02.11.10 07:57
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Не понял. Давай с примерами кода. Мне в метод Foo(params) передали несколько параметров вида Foo(x, y, z). Я хочу эти параметры передать в метод Bar(params). Что я буду делать?


как будет <=> как было
Bar(params args) <=> Bar(x, y, z); Bar(args)
Bar(args) <=> Bar( (object)args )
Re[3]: C# params keyword and null problem
От: matumba  
Дата: 02.11.10 08:18
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>
ВВ>int[] arr = new int[0, 1, 2];
ВВ>foo(arr);//Что ожидаете в этом случае?

Банально же, ps[0] = ссылка на массив трёх целых.


ВВ>int[] arr = null;
ВВ>foo(arr);//А в этом случае?
ВВ>


ps[0] = null;

Что тут НЕочевидного?
Re[3]: C# params keyword and null problem
От: matumba  
Дата: 02.11.10 08:21
Оценка: -3
Здравствуйте, _FRED_, Вы писали:

_FR>Open you mind — вспомните, что для платформы .NET существует множество языков, ни один из которых не обязан поддерживать params.


Я бы посоветовал ровно это же в ответ: Если отбросить маркетоидную шелуху, для платформы .НЕТ существует ОДИН ПОЛНОЦЕННЫЙ ЯЗЫК — C#.
Re[7]: C# params keyword and null problem
От: matumba  
Дата: 02.11.10 08:30
Оценка: :)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Сейчас я могу так:


ВВ>
ВВ>void Foo(params object[] args) {
ВВ>  Bar(args);
ВВ>}


ВВ>void Bar(params object[] args) {
ВВ>  ...
ВВ>}
ВВ>


ВВ>В твоем варианте я так не смогу. Т.е. хуже уже стало, а вот бенефиты сомнительны.


Для подобных случаев прекрасно сработает костыль: если params сущность передаётся в другую функцию в аргументе params, она незаметно развёртывается. Что тут сложного?
Я больше скажу: ДАЖЕ если бы это не было возможно, архитектурная стройность языка превыше микросекундных выйгрышей. Увы, но с текущим поведением C# напоминает студенческую лабораторку, где за 10 минут до сдачи "улучшили" скорость. "И эти люди учат меня не ковыряться в носу!" (ц)
Re[4]: C# params keyword and null problem
От: Пельмешко Россия blog
Дата: 02.11.10 09:24
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, _FRED_, Вы писали:


_FR>>Open you mind — вспомните, что для платформы .NET существует множество языков, ни один из которых не обязан поддерживать params.


M>Я бы посоветовал ровно это же в ответ: Если отбросить маркетоидную шелуху, для платформы .НЕТ существует ОДИН ПОЛНОЦЕННЫЙ ЯЗЫК — C#.


Один из неполноценных языков (хнык ), кстати, ведёт себя так же как C#:
type Foo =
     static member Bar([<System.ParamArray>] ps : obj array) =
            printfn "got %d parameters for great good" ps.Length

Foo.Bar(null, null, null, null)
Foo.Bar(null, null, null)
Foo.Bar(null, null)
Foo.Bar(null) (* аналогично *)
Foo.Bar()
Re: C# params keyword and null problem
От: nikov США http://www.linkedin.com/in/nikov
Дата: 04.11.10 19:10
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>
Кё>//
Кё>// Warning:
Кё>


Это ещё что... Об этом везде написано. Я другой пример покажу:

using System;
using System.Collections.Generic;

class Problem
{
    static void Main()
    {
        var x = new[] { new List<string>(), new List<string>() };

        Bar1(x);
        Bar2(x);
    }

    static void Bar1<T>(T[] x) where T : IList<string> 
    {
        Foo(x);
    }

    static void Bar2<T>(T[] x) where T : List<string>  
    {
        Foo(x);
    }

    static void Foo(params object[] x)
    {
        Console.WriteLine(x.Length);
    }
}
Re[2]: C# params keyword and null problem
От: Пельмешко Россия blog
Дата: 05.11.10 00:08
Оценка:
Здравствуйте, nikov, Вы писали:

N>Я другой пример покажу:


Владимир, а не могли бы Вы разъяснить логику компилятора в данном случае? У меня взорвало мозг...

У F# в данной ситуации всё ок:
open System
open System.Collections.Generic

type Problem =
     static member Bar1(x: #IList<string>[]) = Problem.Foo(x)
     static member Bar2(x:  #List<string>[]) = Problem.Foo(x)
     static member Foo([<ParamArray>] x: obj[]) = printfn "%d" x.Length

let xs : List<string>[] = [| |]

Problem.Bar1(xs) // 1
Problem.Bar2(xs) // 1
Re[3]: C# params keyword and null problem
От: nikov США http://www.linkedin.com/in/nikov
Дата: 05.11.10 02:00
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>Владимир, а не могли бы Вы разъяснить логику компилятора в данном случае? У меня взорвало мозг...


На самом деле там всё довольно просто, и строго по спеке. Я думаю, ты сам разберешься, если ещё подумаешь.
Ключевая фраза: ковариантность массивов.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.