Если то, что вы хотите сделать, это взять список десятичных дробей и вычесть по одному из каждого, изменяя список, вы сделаете следующее:
void MutateList(List<decimal> values)
{
for(int i = 0; i < values.Count; i += 1)
values[i] -= 1m;
}
Если вы хотите взять список десятичных дробейи вернуть другой список, где новый список совпадает со старым списком, но каждый элемент на один меньше, то есть:
List<decimal> NewList(List<decimal> values)
{
return values.Select(v => v - 1m).ToList();
}
Если по какой-то причине вы ограничены сценариямиСистема для подписи:
void RunScript(object input, ref object output)
{
}
Тогда вы делаете то же самое, что и раньше .Если вам нужно изменить список, вы сделаете следующее:
void MutateList(List<decimal> values)
{
for(int i = 0; i < values.Count; i += 1)
values[i] -= 1m;
}
void RunScript(object input, ref object output)
{
MutateList((List<decimal>)input);
}
Вы сохраните себя в мире разумных типов в максимально возможной степени .
Аналогично, есливам нужно вернуть новый список:
List<decimal> NewList(List<decimal> values)
{
return values.Select(v => v - 1m).ToList();
}
void RunScript(object input, ref object output)
{
output = NewList((List<decimal>)input);
}
Сохраняйте как можно больше статически типизированного кода и пишите разумный, нормальный код C #. Используйте странный интерфейс только там, где требуется использовать странный интерфейс .Везде должен быть нормальный, статически типизированный код C #.