Точечная структура отказывается быть созданной - PullRequest
0 голосов
/ 10 марта 2011

Это должно быть достаточно просто. Вот моя одна строка кода, которая доставляет мне неприятности:

Point tp3 = new Point(0.0, 0.0);

И все же, если я сразу после этого прервусь и введу «tp3» в окне «Немедленно», я получу «Имя tp3» не существует в текущем контексте ». Что, черт возьми, происходит? У меня в этом проекте гораздо больше кода, чем просто одна строка, но я не уверен, что может повлиять на него. Я буквально ломаю линию прямо после этого, а tp3 нигде не видно. Если я наведусь на tp3 в режиме перерыва, я тоже ничего не получу.

Кто-нибудь знает, что может быть причиной этого? Почему C # не позволяет мне создавать Point ??

Edit: я использую структуру System.Windows.Point, и я обнаружил, что на самом деле я работал в режиме Release, когда я хотел быть в Debug. Что, конечно, было проблемой, так как tp3 собирался мусором. Спасибо всем за быстрые и точные ответы! Я собирался вытащить свои мозги. Да, мои мозги.

Редактирование # 2: На самом деле, как указал Мопертуис (каламбур полностью предназначен), поскольку Point - это структура, она не собирается собираться, вместо этого компилятор даже не выделяет для нее место в первую очередь, поскольку не использовал. Спасибо, Мопертюи!

Ответы [ 3 ]

4 голосов
/ 10 марта 2011

Если tp3 больше не используется, он будет классифицирован как вне области и подлежит сборке мусора.

Попробуйте добавить что-то вроде Point tempP = tp3; после вашей строки, тогда вы сможете увидеть его.1004 *

2 голосов
/ 10 марта 2011

Если в свойствах проекта установлен флажок «Оптимизировать код», он по существу установит для локального объекта значение null после его последнего использования, чтобы его можно было собирать мусором. Кроме того, если переменная нигде не используется, она фактически не будет выделена.

Не зависит напрямую от режима отладки или выпуска, но режим отладки по умолчанию не проверен (не оптимизирован), а выпуск по умолчанию отмечен.

1 голос
/ 10 марта 2011

Вы передаете аргументы с плавающей запятой в целочисленный конструктор.

Попробуйте вместо этого создать PointF:

PointF tp3 = new PointF(0.0f, 0.0f);

Еще лучше, поскольку PointF - это структура, просто используйте:

PointF tp3 = PointF.Empty;
...