2009-12-23 45 views
1

我在想如何Regex.Match.Group想是动态的:如何编写一个返回动态对象的扩展方法?

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

想是:

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

我想过写一个扩展方法,将允许:

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

试着用这种方式写它,但这是不允许的(';'require d。通过 '静中有动')

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; 
     } 
    } 
} 

任何方式做到这一点?

dynamic之前有很多其他API可以使用这种方式更清洁。

+0

这就是为什么动态没有得到接近任何代码,我可以控制的这样一个很好的例子。你用这个做的唯一的事情就是你有一些看起来是静态类型但不是的东西。 – erikkallen 2009-12-23 23:54:05

+0

@erik:非常真切的关注。我决定看看是否有可能在看到我喜欢它之前。我正在考虑调用扩展方法'DynamicGroups()'来说清楚。你怎么看? – 2009-12-24 00:26:50

回答

8

这里有一个在你的代码误差小,改变dynamic DynamicGroups只是dynamic

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

傻我。谢谢! – 2009-12-24 00:26:02

相关问题