같은 것을
conv = o => o.ToString();
뭔가를 변환 할 필요가 없습니다 시도 .NET 런타임의 모든 유형이 객체를 상속하므로 객체화 할 수 없습니다. 당신이 콤보 상자에 목록 Form1.AnimalTypes
의 구성원을 지정하려면
당신은 단지 Items
컬렉션에 추가 할 수 있어야하고 당신은의 이름으로 표시 할 재산과 ValueMember
의 이름으로 DisplayMember
을 설정해야 바인딩하려는 속성
comboBox.Items.AddRange(Form1.AnimalTypes);
comboBox.DisplayMember = "AnimalTypeName";
comboBox.ValueMember = "AnimalTypeId";
당신은 다음과 같은 작업을 수행 할 수는 중요하지 않습니다 단지 변환 및 콤보 상자에 할당을 원한다면 :
컨버터 클래스에 의해 정의되지 않은 변환에 필요한
object[] myArray = Form1.AnimalTypes.ToArray();
객체의 상속, 즉 사과를 오렌지로 변환하고 싶다면 변환기를 사용하고 사과 나 오렌지를 과일로 변환하려면 캐스트를 사용하십시오. C# 3.0에서는 다음 코드를 사용하여 전체 모음을 시전 할 수 있습니다
: 당신은 또한 콜렉션에서 지정된 유형의 항목을 filte하고 특정 유형의 컬렉션을 추출 할 수 있습니다 Linq를 사용
var newColOfBaseType = myList.Cast<BaseType>();
var oranges = fruit.OfType<Orange>().Cast<Orange>();
당신은 또한 변환 할 Select
을 사용할 수 있습니다 Linq에 사용 :
var oranges = apples.Select(new Orange() { /* ... and initializers here ...*/});
흠 그때 정말 변환기 클래스의 지점을 그리워합니다. 이 점과 단순한 전환 방법을 쓰는 것의 차이점은 무엇입니까? – Petr
변환기를 사용하면 "목록의 각 항목에 대해 반복"비트를 수행합니다. 위임자에게 제공하고 목록의 모든 항목에 적용합니다 (ConvertAll 사용). 또한 나머지 코드와 변환 로직을 분리 할 수 있습니다. 팩토리 클래스 나 비슷한 것을 사용하여 일부 변수를 기반으로 적절한 변환기를 선택할 수 있습니다. –