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中實現相同的功能?