4 / 4 / 0
Регистрация: 28.05.2011
Сообщений: 84
|
||||||
1 | ||||||
Как присвоить переменной объект из цикла foreach23.06.2012, 00:25. Показов 8011. Ответов 15
Метки нет (Все метки)
на сам код особенно внимание не обращайте. суть трабла - не могу присвоить переменной объект из цикла foreach
получаю сообщение, что "Use of unassigned local variable 'DPanel' " блин.. не пойму в чем дело в отладчике видно, что DockPanel p не пустая.
0
|
23.06.2012, 00:25 | |
Ответы с готовыми решениями:
15
Изменение переменной цикла foreach Присвоить объект переменной можно ли глобально присвоить объект переменной? Как выйти из цикла foreach |
311 / 249 / 44
Регистрация: 06.12.2010
Сообщений: 527
|
|||||||||||
23.06.2012, 00:28 | 2 | ||||||||||
Потому что у Вас объявлена переменная, но ей не присвоено значение.
У Вас так:
0
|
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
|
|
23.06.2012, 00:37 | 3 |
Use of unassigned local variable - ошибка компилятора. Если вы не можете скомпилировать проект, при чем тут отладчик?
0
|
23.06.2012, 00:55 | 4 |
ты не весь код показал. твоя переменная DPanel получает значение только если хотя бы один раз x is TabItem, иначе ей не присваивается никакое значение. а ты где-то в коде, который остался за кадром, пытаешься эту переменную использовать (уж не знаю как, посмотри сам).
0
|
4 / 4 / 0
Регистрация: 28.05.2011
Сообщений: 84
|
||||||
23.06.2012, 18:29 [ТС] | 5 | |||||
сорри я не весь код привел. если закомментировать последнюю строку , то ошибки нет. если раскомментировать , то Error-Use of unassigned local variable 'DPanel' при том, что в строке DPanel = p; мы передаем ссылке реальный объект. ОН действительно присваивается в процессе выполнения программы. а вот на этапе компиляции ошибка Добавлено через 1 минуту мы, вроде, объявляем ссылку на объект и главное до начала ее использования проинициализирвать ее тем самым объектом. Добавлено через 1 минуту это я проверил. значение реально имеется. там где DPanel = p; , p не null
0
|
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
|
||||||
23.06.2012, 21:38 | 6 | |||||
Компилятор не считает переменную инициализированной если она инициализируется (простите за тавтологию) только в некоторых случаях (что вполне логично). То есть, если !x is TabItem или !t.Header.Equals("test panel!"), переменной не будет присвоено значение и вы не сможете ею пользоваться.
Ссылка, при объявлении, не считается инициализированной. Не надо убирать
1
|
4 / 4 / 0
Регистрация: 28.05.2011
Сообщений: 84
|
|
24.06.2012, 01:16 [ТС] | 8 |
да да.. это я уже понял. долго не мог понять , что не нравится компилятору.
спасибо за ответ! Добавлено через 1 минуту у меня там без вариантов, в коллекции обязательно есть TabItem ... но компилятор об этом не знает )))
0
|
Master of Orion
|
|
24.06.2012, 12:36 | 10 |
Кстати, еще вопрос про foreach: не знаю, может я тупой или что, но допустим мне надо найти в коллекции определенное значение, я могу сделать 2-3 вложенных for по старинке, могу запустить foreach, и я вынужден пользоваться первым случаем, потому что тогда я не могу получить индексы того элемента, который мне нужен (то есть мне не просто значение нужно, по значению я как раз хочу найти индекс элемента, у которого это значение). Может там есть какая-то встроенная функция? А то получается довольно ограниченное применение: только для копирования и чтения, и то не всех параметров. Например, если я хочу скопировать значения массив (не стандартной процедурой), то мне нужно все равно писать циклы по i,j и копировать, потому что массиву они нужны, а не только само значение..
0
|
4 / 4 / 0
Регистрация: 28.05.2011
Сообщений: 84
|
|||||||||||
24.06.2012, 12:49 [ТС] | 11 | ||||||||||
если я правильно понял вопрос, то во-первых можно ввести переменную которая и будет индексом (но это конечно, велосипед )
в общем виде :
но ваащет есть еще и метод indexof, да и сам индекс часто не нужен, а нужен объект из коллекции , а его можно и без получения индекса использовать.
0
|
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
|
|||||||||||
24.06.2012, 13:04 | 12 | ||||||||||
Вы говорите об использовании индексаторов?
Когда "тогда"? Первый случай перебора коллекции (как я понял сие запутанное предложение), у вас через цикл for, что никак не мешает получению индекса. С foreach можете делать так:
T First<T>(this IEnumerable<T>, Func<T, bool>), например. Здесь, простите, я уже ничего не понял... Не по теме: Пожалуйста, склоняйте слова и делайте предложения меньшего объема:wall:
0
|
Master of Orion
|
||||||
24.06.2012, 14:38 | 13 | |||||
Lasur, Хорошо. Предположим у меня есть трехмерный массив. Мне нужно каждый его элемент преобразовать по определенному алгоритму и впихнуть в массив той же размерности, но с другими значениями. То есть что-то вроде
0
|
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
|
||||||
24.06.2012, 15:30 | 14 | |||||
Psilon, могу предложить вам "извращение" через LINQ. Метод Create3dArray можно использовать во всех подобных случаях.
0
|
Master of Orion
|
|
24.06.2012, 15:56 | 15 |
Lasur, с LINQ вообще не работал. Так что можно считать, что без for тут не обойтись (все-таки 3 вложенных for легче написать, чем такой код). Но таки с LINQ надо поразбираться. Что посоветуете почитать, чтобы иметь представление? А то большинство книг заканчивается на обработке исключений и делегатах.
0
|
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
|
||||||
24.06.2012, 17:05 | 16 | |||||
Вся суть в том, что
То есть, после объявления метода можно просто писать одну строку
Дальнейшее изучение можно продолжить самостоятельно решая различные задачи (придумывать самому, искать на форуме и т.д.), просматривая и разбирая примеры из интернета: 1) 7 tricks to simplify your programs with LINQ 2) 101 LINQ Samples 3) Описание LINQ , читая MSDN. На сайте [книги]C# in Depth есть детальное описание интерфейса итераторов. Кстати, многие утверждают, что в этой самой С# in Depth отличное описание LINQ, да и сама книга чудесная. Я лично, ее пока не прочитал) Где то натыкался на очень интересное решение некой мат задачи в "одну строку", но к сожалению, задачу забыл, а ссылку посеял). С другой стороны, интересных "LINQ идей" в интернете полно. Добавлено через 19 минут Ерунду здесь написал, туго сейчас соображаю Можно просто в одну строку реализовать и все три for, написав соответствующий метод, да и работать он будет в разы быстрее. Так что мой код выше абсолютно бесполезен в вашей задаче.
1
|
24.06.2012, 17:05 | |
24.06.2012, 17:05 | |
Помогаю со студенческими работами здесь
16
Как присвоить значение переменной, исходя из значения другой переменной? Как присвоить имя переменной равное аргументу другой переменной? Как переменной описанной в программе присвоить значение переменной в Conditional Compilation Arguments? Как присвоить переменной файл если, допустим, путь к файлу находится в переменной s? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |