개체 컬렉션이있는 작업자 클래스가 있습니다. 두 개의 속성을 갖기 위해 각각의 객체가 필요합니다. 하나는 알 수없는 유형이고 하나는 숫자 여야합니다.C# 제네릭 집합을 구현하는 방법
다른 속성을 허용하지만 작업자 클래스에 필요한 PropA 및 PropB가 있어야하는 여러 항목 클래스를 가질 수 있도록 인터페이스를 사용하려고했습니다.
이것은 지금까지 가지고있는 코드입니다. 사용하려고 시도 할 때까지는 괜찮은 것 같습니다. MyItem이 IItem을 구현하더라도 Myitem 목록은 IItem 목록으로 전달 될 수 없습니다. 이것은 내가 혼란스러워하는 곳입니다.
또한 가능하다면 T를 전달할 필요가없는 작업자 클래스를 인스턴스화 할 때 PropA 유형에 따라 T가 무엇인지 알 수있을 것입니다.
누군가 나를 분류하도록 도와 줄 수 있습니까? 감사합니다.
public interface IItem<T>
{
T PropA { get; set; }
decimal PropB { get; set; }
}
public class MyItem : IItem<string>
{
public string PropA { get; set; }
public decimal PropB { get; set; }
}
public class WorkerClass<T>
{
private List<T> _list;
public WorkerClass(IEnumerable<IItem<T>> items)
{
doStuff(items);
}
public T ReturnAnItem()
{
return _list[0];
}
private void doStuff(IEnumerable<IItem<T>> items)
{
foreach (IItem<T> item in items)
{
_list.Add(item.PropA);
}
}
}
public void usage()
{
IEnumerable<MyItem> list= GetItems();
var worker = new WorkerClass<string>(list);//Not Allowed
}
@Aaaronaught : 프로그래밍 언어가 이제는 (적어도 다음 버전에서) 흥미 롭다면 프로그래머가 생각한 프로그래머의 코드 작업을 처음부터해야한다고 생각해보십시오. C#에서 개선 된 점을 좋아합니다. 그 공분산을 읽을테니까 – Hao
그게 효과가있어, 고마워! 이 문제에 접근하는 간단한 방법이 있습니까? 아니면 올바른 방향으로 가고 있습니까? – Amy
@Amy : 'WorkerClass'가 무엇을하는지 또는 'Item'객체가 무엇인지 모르게 말하기는 어렵습니다. 제네릭 형식/인터페이스를 파생시키고 추가로 제한하는 것이 좋습니다. 나는 항상 이것을한다. – Aaronaught