extravert писал(а):gnoblin, я немного не понимаю как мне добиться такой конструкции. Хотя она была бы идеальна. Когда в юнити мы создаем EditorWindow оно существует отдельно. Скрипт из которого мы его вызвали не будет ждать пока мы введем и посчитаем значения. А мне нужно чтобы вот я грубо говоря подал int из списка да или вообще любое другое поле, и потом ровно туда же записался итоговый результат то есть значение поля которое я отдал окну "заместилось" новым значением.
то есть аля
element = Calculate(element);
я отдал значение и туда же записал новое.
Но чтобы записать не сразу мне видимо нужно хранить ссылку на объект. А как ее хранить ума не приложу.
Формулировка вопроса не до конца ясна, но в последнем посте что то проясняется.
Подойду из далека.
Unity3d в качестве исполняемой платформы использует MONO, в свою очередь MONO это реализация нашего доброго DotNET под все платформы, с маленькими ограничениями. Так вот в DotNET:
1) Все типы данных делятся на ссылочные (reference) и типы значений (value)
2) Все массивы и коллекции являются ссылочными типами
3) Запрещается изменять итерируемую циклом foreach коллекцию внутри цикла!!!
Тут надо понять что у вас массив или коллекция?
Если нужно выборочно поменять коллекцию (например изменить элементы, удалить и т.д.), обычно мы делаем так:
Используется csharp
public class Element
{
public int SomeValue { get; set; }
}
protected void ChangeCollection()
{
//Оригинальная коллекция заполнение (для примера)
var collection = new List<Element>
{
new Element() {SomeValue = 1},
new Element() {SomeValue = 5},
new Element() {SomeValue = 10},
new Element() {SomeValue = 3}
};
//Новая коллекция
var newCollection = new List<Element>();
//Например надо заменить элементы у которых SomeValue<5
foreach (var element in collection)
{
newCollection.Add(element.SomeValue < 5 ? new Element() { SomeValue = element.SomeValue * 2 } : element);
}
//Теперь имеется новая коллекция со значениями newCollection
//Если нужно исходную коллекция привести к такому же состоянию как и новая, то делаем:
collection.Clear();
collection.AddRange(newCollection);
//Теперь оригинальная коллекция изменена!
}