相关疑难解决方法(0)

获取实现接口的所有类型

使用反射,如何使用最少的代码获得使用C#3.0/.NET 3.5实现接口的所有类型,并最大限度地减少迭代?

这就是我想要重写的内容:

foreach (Type t in this.GetType().Assembly.GetTypes())
    if (t is IMyInterface)
        ; //do stuff
Run Code Online (Sandbox Code Playgroud)

c# reflection optimization lambda c#-3.0

524
推荐指数
11
解决办法
24万
查看次数

获取抽象类的所有继承类

我有一个抽象类:

abstract class AbstractDataExport
{
        public string name;
        public abstract bool ExportData();
}
Run Code Online (Sandbox Code Playgroud)

我有从AbstractDataExport派生的类:

class XmlExport : AbstractDataExport
{
    new public string name = "XmlExporter";
    public override bool ExportData()
    {
        ...
    }
}
class CsvExport : AbstractDataExport
{
    new public string name = "CsvExporter";
    public override bool ExportData()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?(伪代码:)

foreach (Implementation imp in Reflection.GetInheritedClasses(AbstractDataExport)
{
    AbstractDataExport derivedClass = Implementation.CallConstructor();
    Console.WriteLine(derivedClass.name)
}
Run Code Online (Sandbox Code Playgroud)

输出像

CsvExporter
XmlExporter
Run Code Online (Sandbox Code Playgroud)

这背后的想法是创建一个派生自AbstractDataExport的新类,这样我就可以自动遍历所有实现并将名称添加到Dropdown-List.我只是想编译派生类而不改变项目中的任何其他内容,重新编译,宾果游戏!

如果您有其他解决方案:告诉他们.

谢谢

c# reflection inheritance

112
推荐指数
4
解决办法
9万
查看次数

如何在程序集中查找从特定类型C#继承的所有类型

如何获得从特定其他类型继承的所有类型的集合?

c# reflection

90
推荐指数
2
解决办法
4万
查看次数

获取实现特定开放泛型类型的所有类型

如何获得实现特定开放泛型类型的所有类型?

例如:

public interface IUserRepository : IRepository<User>
Run Code Online (Sandbox Code Playgroud)

找到所有实现的类型IRepository<>.

public static IEnumerable<Type> GetAllTypesImplementingOpenGenericType(Type openGenericType, Assembly assembly)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

c# generics reflection open-generics

46
推荐指数
4
解决办法
2万
查看次数

如何动态添加XmlInclude属性

我有以下课程

[XmlRoot]
public class AList
{
   public List<B> ListOfBs {get; set;}
}

public class B
{
   public string BaseProperty {get; set;}
}

public class C : B
{
    public string SomeProperty {get; set;}
}

public class Main
{
    public static void Main(string[] args)
    {
        var aList = new AList();
        aList.ListOfBs = new List<B>();
        var c = new C { BaseProperty = "Base", SomeProperty = "Some" };
        aList.ListOfBs.Add(c);

        var type = typeof (AList);
        var serializer = new XmlSerializer(type);
        TextWriter w = …
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization xmlinclude

25
推荐指数
2
解决办法
2万
查看次数

如何获取基类的所有继承类?

    class Foo { }

    class Foo1 : Foo { }

    class Foo2 : Foo { }
Run Code Online (Sandbox Code Playgroud)

我怎样才能将所有使用Foo的类作为基类?在同一程序集中不需要继承的类.

c# reflection inheritance assemblies

11
推荐指数
1
解决办法
6400
查看次数

获取通用接口的所有实现类型

我正在尝试使用以下代码来获取IEntityModelBuilder的所有实现,但它将返回一个空集合。

public class EntityFrameworkDbContext : DbContext
{
    //constructor(s) and entities DbSets...

    private static IEnumerable<IEntityModelBuilder<IEntity>> _entitymodelBuilders;
    internal IEnumerable<IEntityModelBuilder<IEntity>> EntityModelBuilders
    {
        get
        {
            if (_entitymodelBuilders == null)
            {
                var type = typeof(IEntityModelBuilder<IEntity>);

                _entitymodelBuilders = Assembly.GetAssembly(type).GetTypes()
                    .Where(t => type.IsAssignableFrom(t) && t.IsClass)
                    .Select(t => (IEntityModelBuilder<IEntity>)Activator.CreateInstance(t, new object[0]));
            }

            return _entitymodelBuilders;
        }
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        foreach (var builder in EntityModelBuilders)
            builder.Build(modelBuilder);

        base.OnModelCreating(modelBuilder);
    }
}

internal interface IEntityModelBuilder<TEntity> where TEntity : IEntity
{
    void Build(DbModelBuilder modelBuilder);
}

//sample implementation
internal class UserModelBuilder …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection entity-framework

1
推荐指数
2
解决办法
1366
查看次数