Когда Дополнительные Методы повреждаются?

Вы должны инициализировать массив 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)

12
задан Tobias Hertkorn 10 March 2009 в 12:26
поделиться

7 ответов

Некоторое любопытство:

  • можно было бы обратиться к дополнительным методам null экземпляры; это могло бы путать (но иногда полезное)
  • "скрывающейся" проблемой является важная персона, если у них есть другое намерение
  • одинаково Вы могли бы получить другой дополнительный метод с тем же именем от 2 различных пространств имен; если у Вас только есть одно из этих двух пространств имен, это могло бы привести к непоследовательному поведению (в зависимости от который)...
  • ... но если кто-то добавит подобное (та же подпись) дополнительный метод во втором пространстве имен, которое использует Ваш код, то это повредится во время компиляции (неоднозначный)

(редактирование) И конечно, существует"Nullable<T>/new()"бомба (см. здесь)...

9
ответ дан 2 December 2019 в 06:10
поделиться

Я не соглашаюсь, смысл дополнительных методов должен добавить Ваших участников к черным помещенным в коробку классам. Как все остальное существуют ловушки, необходимо быть внимательными в именовании, реализации и понять иерархию методов.

5
ответ дан 2 December 2019 в 06:10
поделиться

Одна поломка мы только что нашли в проекте MoreLINQ: если Вы пишете универсальный дополнительный метод, невозможно удостовериться, что это будет работать со всеми типами. У нас есть метод с этой подписью:

public static IEnumerable<T> Concat<T>(this T head, IEnumerable<T> tail)

Вы не можете использовать это с:

"foo".Concat(new [] { "tail" });

из-за string.Concat метод...

4
ответ дан 2 December 2019 в 06:10
поделиться

Что называет .NET, дополнительные методы являются также ограниченной формой MonkeyPatching (попытайтесь проигнорировать php напыщенную речь там).

Это должно дать Вам некоторый материал для Вашего обсуждения.

1
ответ дан 2 December 2019 в 06:10
поделиться

Я использовал Ruby on Rails для почти, пока я использовал C#. Ruby позволяет Вам делать что-то подобное новым дополнительным методам. Существуют, конечно, потенциальные проблемы, если кто-то назвал метод тем же, но преимущества способности добавить методы к закрытому классу явно перевешивают потенциальный недостаток (который был бы, вероятно, вызван плохим дизайном или плохим планированием).

2
ответ дан 2 December 2019 в 06:10
поделиться

В первую очередь, я полагаю, что Ваша формулировка является немного вводящей в заблуждение. Я беру его, Вы говорите о "типах" и не "объектах".

Во-вторых, большое преимущество дополнительных методов состоит в том, что можно добавить опции для ввода Вас, не управляют. Если Вы управляете типом, почему не только изменяют тип вместо того, чтобы полагаться на дополнительные методы?

1
ответ дан 2 December 2019 в 06:10
поделиться

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.

2
ответ дан 2 December 2019 в 06:10
поделиться