Устранение ошибки с операндами типа object и int
Я пытаюсь обработать список десятичных знаков, которые вводятся в блок C# Script в Grasshopper. объект x получает входной список десятичных дробей, а объект ref A должен затем вывести решение. В настоящее время, хотя я получаю эту ошибку:
1. Error (CS0019): Operator '-' cannot be applied to operands of type 'object' and 'int' (line 59)
private void RunScript(object x, ref object A)
{
int intNum = new int();
intNum = Convert.ToInt32(x);
A = x - intNum;
}
Я не понимаю, почему это не работает, любое понимание было бы удивительно полезно. Спасибо!
2 ответа
Если то, что вы хотите сделать, это взять список десятичных дробей и вычесть по одному из каждого, изменяя список, вы делаете это:
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#.
Вы должны привести к Int32 вашу переменную x. Вы не можете вычесть из объекта
private void RunScript(object x, ref object A)
{
int intNum = new int();
intNum = Convert.ToInt32(x);
A = (int) x - intNum;
}