在C#和#x27中键入列表;s泛型:可能吗?
假设有以下接口在C#和#x27中键入列表;s泛型:可能吗?,c#,generics,c#-3.0,C#,Generics,C# 3.0,假设有以下接口 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 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 );
}
private静态无效测试()
{
Configurator.Root()
.Join(=>.ChildA)
.Join(=>a)
.Up()
.Join(=>\uB)
.Up()
.Up()
.Join(=>u.ChildB);
}
需要允许任意嵌套级别的连接/向上对。下面是我声明这种配置程序的尝试
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?
}
公共静态类配置器
{
公共静态IConfigBuilder根目录()
{
返回null;
}
}
公共接口IConfigBuilder
{
IConfigBuilder连接(表达式);
IConfigBuilder您至少需要两个接口;并且,不要为Up
返回IConfigBuilder
,而是相信创建代码知道它创建了什么:
public interface IConfigBuilder<T>
{
IConfigBuilder<IConfigBuilder<T>, C> Join<C>(Expression<Func<T, C>> expression);
}
public interface IConfigBuilder<P, T> : IConfigBuilder<T>
{
P Up(); // This is the problem. How can I get grand-parent type?
new IConfigBuilder<IConfigBuilder<P, T>, C> Join<C>(Expression<Func<T, C>> expression);
}
公共接口IConfigBuilder
{
IConfigBuilder连接(表达式);
}
公共接口IConfigBuilder:IConfigBuilder
{
P Up();//这就是问题所在。如何获取父级类型?
新的IConfigBuilder联接(表达式);
}