2014-05-15 3 views
0

내 코드이 잘 작동이리스트 <dynamic>()에서 데이터를 가져 오는 방법은 무엇입니까?

var eventDocs = new List<dynamic>();  
foreach (var node in eventtypeNode.GetDescendantNodes()) 
{ 
    string files = node.GetProperty("document").Value; 
    eventDocs.Add(new { Id = node.Id, Name = node.Name, CreatedOn = node.CreateDate, Path = files }); 
} 

같다. 이제이 동적 목록에서 데이터를 가져 오려고합니다.

foreach (var eventDoc in eventDocs) 
{ 
    eventDoc.---- //nothing comes on intellisence 
} 

IntelliSense에는 아무 것도 나오지 않습니다. 내가 뭐 잘못하고 있니?

+2

GetDynamicMemberNames()GetMetaObject 방법을 시도,이 같은 동적 멤버에 액세스 할 수 없습니다? 거기에 명확하게 정의 된 유형이 있습니다. 클래스를 생성하고 사용하십시오. –

+0

@SimonWhitehead 동의합니다. '동적'의 총 남용. –

답변

5

당신은하지 않습니다 너는 List<dynamic>을 가지고 있기 때문에 Intellisense에서 무엇이든 얻을 수 있습니다. "이 목록에 포함될 내용을 컴파일 타임에 알지 못합니다. 요소의 멤버에 액세스하면 실행 시간에 동적으로 바인딩합니다."

실행 시간에 바인딩을 연기한다고 가정 할 때 Intellisense가 목록에 무엇이 들어 있는지 알 수없는 이유는 무엇입니까?

LINQ 쿼리를 사용하기 위해 코드를 변경해야하는 것처럼 보입니다. 익명 형식이 될 알려진 요소 유형의 목록을 가질 수 있습니다.

var eventDocs = eventtypeNode.GetDescendantsNodes() 
     .Select(node => new { Id = node.Id, 
          Name = node.Name, 
          CreatedOn = node.CreateDate, 
          Path = node.GetProperty("document").Value }) 
     .ToList(); 
2

Intellisense는 데이터가 dynamic이기 때문에 제안 사항을 표시하지 않으며 표시 할 내용을 알지 못합니다.

하지만 무엇이 포함되어 있는지 알고 계실 것입니다. 코드 만 있으면 괜찮을 것입니다.

또한 dynamic 개체가 필요하지 않습니다. 당신이 원하는 것은 잘 정의이기 때문에 단지 필요한 속성과 메소드와 클래스를 정의하고 목록을 작성 :

List<YourClass> list = new List<YourClass>(); 

을 그리고 인텔리이 제안을 보여줄 수있을만큼 지능이 될 것 ;)

+0

... 왜'동적'을 사용합니까? OP는 명확하게 정의 된 유형을 가지고 있습니다. 그렇게 만드세요 .. –

+0

@SimonWhitehead, 어떤 유형입니까? 내가 편집 할 수있게 말해 줄 수 있니? 노드 등을 발견하지 못했습니다. OP가 사용하고있는 유형의 이름은 무엇입니까? –

+0

당신은 그것을 알 필요가 없습니다. OP는 익명 객체를 동적 목록에 저장합니다. OP는 실제 객체 (익명 객체가 아닌)를 정의하고 목록을 입력해야합니다 (예 : intelisense). –

1

당신은 왜 어쨌든`dynamic`를 사용하는

관련 문제