2009-12-23 1 views
1

생각되었다 :동적 객체를 반환하는 확장 메서드를 작성하는 방법은 무엇입니까? 내가 Regex.Match.Group 동적되고 싶어 방법에 대해

Regex.Match (...).Groups["Foo"] 

싶습니다 :

Regex.Match (...).Groups.Foo 

내가 허용 할 확장 메서드를 작성하는 생각 :

Regex.Match (...).Groups().Foo 

이렇게 작성하려고 시도했지만 허용되지 않습니다 (';'require "정적 동적 ')

public static dynamic DynamicGroups Groups(this Match match) 
{ 
    return new DynamicGroups(match.Groups); 
} 

public class DynamicGroups : DynamicObject 
{ 
    private readonly GroupCollection _groups; 

    public DynamicGroups(GroupCollection groups) 
    { 
     this._groups = groups; 
    } 
    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     Group g = this._groups[binder.Name]; 

     if (g == null) 
     { 
      result = null; 
      return false; 
     } 
     else 
     { 
      result = g; 
      return true; 
     } 
    } 
} 

상관로서 D는이를 위해?

dynamic 전에 작성된 다른 API가 많이 있는데,이 방법을 사용하는 것이 더 깔끔할 수 있습니다.

+0

이 내가 제어를 통해이 코드에 가까워되지 않는 이유 동적 같은 좋은 예입니다하기 dynamic DynamicGroups 변경합니다. 당신이 이것으로 달성 할 수있는 유일한 것은 당신이 정적으로 타이핑되어 보이지만 보이지 않는 것을 가지고 있다는 것입니다. – erikkallen

+0

@erik : 매우 실제적인 걱정입니다. 나는 내가 그것을 좋아하는지보기 전에 그것이 가능했는지보기로 결정했다. 확장 메소드'DynamicGroups()'를 호출하여이를 명확하게하려고 생각했습니다. 어떻게 생각해? –

답변

8

코드에서 하나의 작은 오류가있다, 단지 dynamic

public static dynamic Groups(this Match match) 
{ 
    return new DynamicGroups(match.Groups); 
} 
+0

어리석은 나를. 감사! –

관련 문제