Такое поведение нормально? Или это бага?
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>>