2010-03-22 2 views
1

object[]List<string>으로 채우려고하지만 ConvertAll을 사용하는 방법을 알 수 없습니다. MSDN이 도움이되지 못했습니다. 처음에는 Converter의 인스턴스를 만들려고했지만 델리게이트가 필요합니까?C# 변환기의 어려움

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

감사 :)

답변

0

같은 것을

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 ...*/}); 
0

대리자 요청 타입으로 수집 각 부재를 변환한다. 당신은 문자열로 오브젝트를 변환하려는 경우 당신이 객체에 문자열을 변환하려는 경우

, 시도,

conv = ParseStringIntoObject; 

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

흠 그때 정말 변환기 클래스의 지점을 그리워합니다. 이 점과 단순한 전환 방법을 쓰는 것의 차이점은 무엇입니까? – Petr

+2

변환기를 사용하면 "목록의 각 항목에 대해 반복"비트를 수행합니다. 위임자에게 제공하고 목록의 모든 항목에 적용합니다 (ConvertAll 사용). 또한 나머지 코드와 변환 로직을 분리 할 수 ​​있습니다. 팩토리 클래스 나 비슷한 것을 사용하여 일부 변수를 기반으로 적절한 변환기를 선택할 수 있습니다. –