Список настроек <CustomObject>= Список <String>- наличие мертвого момента мозга - PullRequest
0 голосов
/ 30 декабря 2010

Я уверен, что это легко. На самом деле я уверен, что делал это раньше ...

У меня есть класс MyClass, который имеет 2 параметра TheString и SomeInt

Где-то в другом классе я объявляю List<MyClass> MyClassList и List<String> StringList

У обоих одинаковое количество предметов. Я хочу, чтобы это устанавливало все «TheStrings» в каждом MyClass из MyClassList равным соответствующей строке из StringList

Я установил MyClassList = StringList

Теперь я знаю, что это не сработает, потому что они разных типов. Я думаю, что мне нужно перегрузить оператор присваивания (=), но я не вижу, как это делается. Я полагаю, я всегда мог бы предоставить метод для вызова из MyClass, но это не так уж и элегантно. Какое было бы самое элегантное решение?

Спасибо Томас

Ответы [ 3 ]

3 голосов
/ 30 декабря 2010

Вы не можете перегрузить оператор = . Вы можете сделать неявное преобразование, например из MSDN:

public static implicit operator double(Digit d)
{
   return d.val;
}

Однако в случае списков я думаю, что лучшее решение - использовать LINQ:

List<MyClass> list = (from value in StringList
                     select new MyClass { TheString = value }).ToList();
1 голос
/ 30 декабря 2010

Недостаточно информации, но:

var customObjects = new List<CustomObject>(TheStringList.Select(s => new CustomObject { TheString = s }));

Я не проверял это, но хотел показать идею, которая пришла в голову.

0 голосов
/ 30 декабря 2010

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

for (int index = 0; index = MyClassList.Count; index++)
{
     MyClassList[index].TheString = StringList[index];
}
...