저는 학습을 목적으로 작은 게임을 작성하고 있으며 foreach로 클래스 iterable을 만드는 데 문제가 있습니다. 많은 게임 객체가 구현하는 클래스이며 <dynamic>
유형의 문자열 인덱스 데이터 저장소를 제공합니다. 배열 스타일 액세스가 있으므로 object["arbitrary-key"] = foo;
으로 갈 수 있지만 foreach(dynamic value in object)
이되고 싶습니다. 그래서 IEnumerable 구현해야 할 것처럼 보이지만이 인터페이스에 대한 <dynamic>
형식 제한이있는 것 같습니다. IEnumerable <dynamic>을 구현할 수 없습니다. should not는해야 할 일을합니다.
public class GameObject : IEnumerable<dynamic>
{
public Dictionary<string, dynamic> data = new Dictionary<string, dynamic>();
public GameObject()
{
}
//Overloads the [] operator to allow array style access
public dynamic this[string key]
{
get { return this.data[key]; }
set { data[key] = value; }
}
//Overloads foreach iteration
public IEnumerator<dynamic> GetEnumerator()
{
foreach (dynamic d in data)
{
yield return d;
}
}
IEnumerator<dynamic> IEnumerable<dynamic>.GetEnumerator()
{
return GetEnumerator();
}
}
그래서 내가 잘못 짚었이 클래스를 재평가해야 할 수 있습니다 생각하고 있어요 :
Error CS1966 'GameObject': cannot implement a dynamic interface 'IEnumerable<dynamic>'
여기 클래스입니다. 어쩌면이 동작을 내장 한 게임 개체를 구현할 수있는 것이 있을까요? 또는 내 목표를 달성하기위한 다른 방법?
[실제로 foreach와 작동하도록 클래스에 IEnumerable을 구현할 필요가 없습니다.] (https://stackoverflow.com/questions/127233/does-class-need-to-implement-ienumerable-to -use-foreach) –
고마워요! 그것은 트릭을했다. – aurath