Добрый день.
Вопрос №1
Есть панель, на которой находится несколько FlowLayoutPanel,а в ней в свою очередь контролы.
Мне надо среди этих контролов найти, например ComboBox у которого в Tag определенная строка.
Сейчас делаю так
foreach (FlowLayoutPanel panel in this.MainPanel.Controls.OfType<FlowLayoutPanel>())
{
var combo = panel.Controls.OfType<ComboBox>().FirstOrDefault(i => i.Tag.ToString().Equals(param));
if (combo != null)
return combo;
}
Можно ли избавится от цикла??
Вопрос №2
Есть DataTable с полями ID И Name.
Нужно выбрать индекс DataRow в которой, указанный Name
Сейчас так
DataRow row = dataTable.Rows.OfType<DataRow>().
FirstOrDefault(i=>i[1].ToString().Equals(value));
dataTable.Rows.IndexOf(row); <-------------можно ли избавится от этого??
И можно выбрать непосредственно DataGridViewComboBoxCell которое соотвествует указанному условию??
Спасибо!
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>Вопрос №1 А>Есть панель, на которой находится несколько FlowLayoutPanel,а в ней в свою очередь контролы. А>Мне надо среди этих контролов найти, например ComboBox у которого в Tag определенная строка. А>Сейчас делаю так А>
А> foreach (FlowLayoutPanel panel in this.MainPanel.Controls.OfType<FlowLayoutPanel>())
А> {
А> var combo = panel.Controls.OfType<ComboBox>().FirstOrDefault(i => i.Tag.ToString().Equals(param));
А> if (combo != null)
А> return combo;
А> }
А>
А>Можно ли избавится от цикла??
var res=(from p in this.MainPanel.Controls.OfType<FlowLayoutPanel>()
from c in p.Controls.OfType<ComboBox>()
where c.Tag.ToString().Equals(param)).FirstOrDefault();
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Здравствуйте, akasoft, Вы писали: A>И что, такая запись не приведёт "внутри" к созданию цикла для получения элемента?
Гм. А что, не очевидно, что "внутри" цикл будет всегда — тупо из-за отсутствия других конструкций на нижнем уровне?
Или есть какая-то иллюзия по поводу "магии", которая бы позволила делать обработку списков переменной длины без циклов?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, akasoft, Вы писали: A>>И что, такая запись не приведёт "внутри" к созданию цикла для получения элемента? S>Гм. А что, не очевидно, что "внутри" цикл будет всегда — тупо из-за отсутствия других конструкций на нижнем уровне? S>Или есть какая-то иллюзия по поводу "магии", которая бы позволила делать обработку списков переменной длины без циклов?
Есть вероятность, что человека попросили переписать код на review. А он не может понять зачем: "внутри же все равно будет цикл".
Здравствуйте, Sinclair, Вы писали:
S>Гм. А что, не очевидно, что "внутри" цикл будет всегда — тупо из-за отсутствия других конструкций на нижнем уровне? S>Или есть какая-то иллюзия по поводу "магии", которая бы позволила делать обработку списков переменной длины без циклов?
Мне-то это очевидно. Другое дело, что я могу ошибаться либо устареть. Мало ли чего там с этим синтаксисом напридумывали, и вдруг там не только "сахар".
Мне известна только одна магия по избавлению от цикла — завести отдельную переменную и хранить ссылку, пока она нужна.
Здравствуйте, akasoft, Вы писали: A>Мне известна только одна магия по избавлению от цикла — завести отдельную переменную и хранить ссылку, пока она нужна.
Не понял идеи. Нет, в смысле, можно конечно построить хешмэп, который отображает string в Combobox по свойству Tag. Тогда, если нужно часто искать комбобокс по значению тега, всё существенно ускорится. Но как тут можно обойтись одной ссылкой, я не допираю.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Не понял идеи. Нет, в смысле, можно конечно построить хешмэп, который отображает string в Combobox по свойству Tag. Тогда, если нужно часто искать комбобокс по значению тега, всё существенно ускорится. Но как тут можно обойтись одной ссылкой, я не допираю.
Возможно, я неверно понял описанную задачу. Понял так, что Tag используется, чтобы пометить нужный элемент управления, чтобы потом к нему обращаться. И Tag не меняется. Так зачем перебирать список каждый раз, ведь достаточно перебрать один раз либо при создании элемента занести ссылку на него в отдельное поле/переменную, и обращаться к ней.
Если меченый меняется, то можно завести отдельный метод для смены, где корректировать поле-ссылку. Если меченых несколько — занести их массив-список.
Здравствуйте, akasoft, Вы писали:
A>Возможно, я неверно понял описанную задачу. Понял так, что Tag используется, чтобы пометить нужный элемент управления, чтобы потом к нему обращаться. И Tag не меняется. Так зачем перебирать список каждый раз, ведь достаточно перебрать один раз либо при создании элемента занести ссылку на него в отдельное поле/переменную, и обращаться к ней.
Меняется Tag или нет не было сказано, так же как и не было сказано, что понадобится лишь один контрол с определённым Tag.
Я думаю топикстартер всего лишь хотел избавится от императивной конструкции для поиска, о том что дальше он делать будет речи вообще не шло.