params?
От: rameel https://github.com/rsdn/CodeJam
Дата: 01.05.07 14:35
Оценка:
Такое поведение нормально? Или это бага?
Main() : void
{
    def count = ParamsSample(GetValues());
    WriteLine($"count: $count, expected: $(GetValues().Length)");
}

GetValues() : array[string]
{
    array["1", "2", "3"];
}

ParamsSample(params values: array[object]) : int
{
    values.Length;
}


Загвоздка в том, что такой код разворачивается в следующее, т.е. создается дополнительный массив для передачи в метод. Если же передавать значение с явным приведением в object GetValues():>array[object], то все нормально.
object[] values = new object[] { GetValues() };
int count = ParamsSample(values);
Console.WriteLine("count: " + Convert.ToString(count) + ", expected: " + Convert.ToString(GetValues().Length));

// печатает count: 1, expected: 3


ЗЫ. Заметил на примере BLToolkit
// C#. Полет нормальный
using (DbManager db = new DbManager())
    db.SetSpCommand("Persons_Insert", db.CreateParameters(obj))
      .ExecuteNonQuery();
        
// Немерле. Без выделенного полет обламывается :)
using (def db = DbManager())
    _ = db.SetSpCommand("Persons_Insert", db.CreateParameters(obj):>array[object])
      .ExecuteNonQuery();
... << RSDN@Home 1.2.0 alpha rev. 677>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.