首页 > 解决方案 > 根据泛型接口获取类属性

问题描述

可以说我有这个:

public interface IMyInterface<T>
{
}

public class MyClass
{
    public IMyInterface<Foo> Foos {get; set;}
    public IMyInterface<Bar> Bars {get; set;}
}

我想要一个像这样的方法

MyClass.Interfaces<T>()

这将返回 MyClass.Foos 或 MyClass.Bars 取决于 T 值。我该怎么做?EF 的工作方式非常相似。

标签: c#generics

解决方案


它需要一些管道和铸造,但你可以用字典来做到这一点:

public interface IMyInterface<T> {
}
public class Foo { }
public class Bar { }

public class MyClass {

    Dictionary<Type, object> myInterfaces = new Dictionary<Type, object>();

    public IMyInterface<Foo> Foos {
        get { return (IMyInterface<Foo>)myInterfaces[typeof(Foo)]; }
        set { myInterfaces[typeof(Foo)] = value; }
    }
    public IMyInterface<Bar> Bars {
        get { return (IMyInterface<Bar>)myInterfaces[typeof(Bar)]; }
        set { myInterfaces[typeof(Bar)] = value; }
    }

    public IMyInterface<T> Interfaces<T>() {
        return (IMyInterface<T>)myInterfaces[typeof(T)];
    }

}

推荐阅读