Вы должны инициализировать массив roadCoordinates
, иначе вы получите ошибку NullReferenceException
. Кроме этого ваша логика в порядке. Вы можете решить эту проблему, добавив эту строку после loopCount
назначения:
roadCoordinates = new Vector3[loopCount];
Что происходит, когда вы не инициализируете свой массив, вы создаете переменную с именем roadCoordinates
, но есть нет памяти, выделенной или указанной для этой переменной. Поэтому он не указывает на что-либо в памяти, и когда вы пытаетесь использовать его, он говорит, что я не могу сослаться ни на один блок памяти.
Как вы упомянули в своем вопросе, что у вас есть список всех порожденных объектов, вы также можете сохранять эти точки в списке, тогда вам не нужно выделять какую-либо память, вы можете просто добавить элементы в список.
List<Vector3> roadCoordinates = new List<Vector3>()
Затем вы можете добавить элементы, используя roadCoordinates.Add(spawnedObjects[i].transform.position)
Если вам нужно сохранить индексы порожденного объекта, который имеет Road Tag
, вы можете использовать Dictionary
Dictionary<int, Vector3> roadCoordinates = new Dictionary<int, Vector3>()
Затем вы можете добавить такие элементы, как roadCoordinates.Add(i,spawnedObject[i].transform.position)
Некоторое любопытство:
null
экземпляры; это могло бы путать (но иногда полезное)(редактирование) И конечно, существует"Nullable<T>
/new()
"бомба (см. здесь)...
Я не соглашаюсь, смысл дополнительных методов должен добавить Ваших участников к черным помещенным в коробку классам. Как все остальное существуют ловушки, необходимо быть внимательными в именовании, реализации и понять иерархию методов.
Одна поломка мы только что нашли в проекте MoreLINQ: если Вы пишете универсальный дополнительный метод, невозможно удостовериться, что это будет работать со всеми типами. У нас есть метод с этой подписью:
public static IEnumerable<T> Concat<T>(this T head, IEnumerable<T> tail)
Вы не можете использовать это с:
"foo".Concat(new [] { "tail" });
из-за string.Concat
метод...
Что называет .NET, дополнительные методы являются также ограниченной формой MonkeyPatching (попытайтесь проигнорировать php напыщенную речь там).
Это должно дать Вам некоторый материал для Вашего обсуждения.
Я использовал Ruby on Rails для почти, пока я использовал C#. Ruby позволяет Вам делать что-то подобное новым дополнительным методам. Существуют, конечно, потенциальные проблемы, если кто-то назвал метод тем же, но преимущества способности добавить методы к закрытому классу явно перевешивают потенциальный недостаток (который был бы, вероятно, вызван плохим дизайном или плохим планированием).
В первую очередь, я полагаю, что Ваша формулировка является немного вводящей в заблуждение. Я беру его, Вы говорите о "типах" и не "объектах".
Во-вторых, большое преимущество дополнительных методов состоит в том, что можно добавить опции для ввода Вас, не управляют. Если Вы управляете типом, почему не только изменяют тип вместо того, чтобы полагаться на дополнительные методы?
One thing you can do to make sure extension methods don't conflict with other methods (extension or otherwise) is to use FxCop with rules such as Prevent Duplicate Extension Method Signatures.