【发布时间】:2009-12-23 23:22:50
【问题描述】:
我在想 Regex.Match.Group 如何变得动态:
Regex.Match (...).Groups["Foo"]
想成为:
Regex.Match (...).Groups.Foo
我想写一个扩展方法来允许:
Regex.Match (...).Groups().Foo
并尝试这样写,但这是不允许的(';'需要'静态动态')
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 使用这种方式可能更简洁。
【问题讨论】:
-
这是一个很好的例子,说明为什么动态没有接近我可以控制的任何代码。这样做的唯一结果是您拥有看起来是静态类型但不是静态类型的东西。
-
@erik:一个非常现实的问题。我决定先看看它是否可能,然后再看看我是否喜欢它。我正在考虑调用扩展方法
DynamicGroups()来说明清楚。你怎么看?
标签: c# dynamic .net-4.0 extension-methods c#-4.0