1
假设有以下接口在C#的泛型中键入列表:是否有可能?
public interface IRoot
{
IChildA ChildA { get; }
IChildB ChildB { get; }
}
public interface IChildA
{
IGrandChildA GrandChildA { get; }
IGrandChildB GrandChildB { get; }
}
public interface IChildB
{
IGrandChildC GrandChildC { get; }
}
public interface IGrandChildA
{
}
public interface IGrandChildB
{
}
public interface IGrandChildC
{
}
我想写出流畅的风格的“配置”,以保持接口的关联。一切应如下所示:
private static void Test()
{
Configurator.Root<IRoot>()
.Join(_ => _.ChildA)
.Join(_ => _.GrandChildA)
.Up()
.Join(_ => _.GrandChildB)
.Up()
.Up()
.Join(_ => _.ChildB);
}
要求允许Join/Up对的任意嵌套级别。这是我尝试声明这样的配置器。
public static class Configurator
{
public static IConfigBuilder<T, T> Root<T>()
{
return null;
}
}
public interface IConfigBuilder<P, T>
{
IConfigBuilder<T, C> Join<C>(Expression<Func<T, C>> expression);
IConfigBuilder<???, P> Up(); // This is the problem. How can I get grand-parent type?
}
目前还不清楚我该如何记住所有前面的节点类型。换句话说,如何声明Up()
方法?这让我想起了古老的好Alexandrescu的C++类型列表。有没有办法在.net中实现相同的功能?