C # Конвертер трудности - PullRequest
       8

C # Конвертер трудности

1 голос
/ 22 марта 2010

Я пытаюсь заполнить object[] List<string>, но не могу понять, как использовать ConvertAll.MSDN мне не помог.Сначала я попытался создать экземпляр Converter, но похоже, что он ожидает делегата?

Converter<string, object> conv = new Converter<string, object>(??); //why delegate? 
this.comboBox1.Items.AddRange(Form1.AnimalType.ConvertAll<object>(conv)); 

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 22 марта 2010

Нет необходимости преобразовывать в объект, поскольку все типы в среде выполнения .NET наследуются от объекта.

Если вы хотите назначить членов списка Form1.AnimalTypes в комбинированный список, вы можете просто добавить их в коллекцию Items, а затем установить DisplayMember на имя свойства, которое вы хотите отобразить, и ValueMember на имя свойства, которое вы хотите связать.

comboBox.Items.AddRange(Form1.AnimalTypes);
comboBox.DisplayMember = "AnimalTypeName";
comboBox.ValueMember = "AnimalTypeId";

Если вы хотите выполнить только преобразование, и назначение в поле со списком не имеет значения, вы можете сделать следующее:

object[] myArray = Form1.AnimalTypes.ToArray();

Класс преобразователя необходим для преобразований, которые не определены наследованием объекта, то есть используйте преобразователи, если вы хотите преобразовать яблоки в апельсины, но используйте приведение, если вы хотите преобразовать апельсины или апельсины в фрукты. В c # 3.0 вы можете разыграть полную коллекцию, используя следующий фрагмент:

var newColOfBaseType = myList.Cast<BaseType>();

Используя Linq, вы также можете фильтровать записи данного типа из коллекции и затем извлекать коллекцию этого определенного типа:

var oranges = fruit.OfType<Orange>().Cast<Orange>();

Используя Linq, вы также можете использовать Select для преобразования:

var oranges = apples.Select(new Orange() { /* ... and initializers here ...*/});
0 голосов
/ 22 марта 2010

Делегат преобразует каждого члена коллекции в запрошенный тип.

Если вы пытаетесь преобразовать объекты в строки, попробуйте что-то вроде

conv = o => o.ToString();

Если вы пытаетесь преобразовать строки в объекты, попробуйте что-то вроде

conv = ParseStringIntoObject;

object ParseStringIntoObject(string stringRepresentation)
{
  // do whatever you need to do in order to convert your string
}
...