c# - 通过 Roslyn 在 C# 中从另一个类创建一个类

标签 c# dynamic

我有一个引用多个第三方库的 .NET Core C# 应用程序。这些库中的每一个都有一个我需要在我的应用程序中使用的对象。有一个问题,我的数据库有两个属性与第三方库中我需要的每个类中的每个属性相关联。这两个属性是 NameDescription

在理想情况下,这些第三方库中的每一个都将使用具有NameDescriptionmy 基类:)。由于这不会发生,我想知道 .NET Core 中是否有一种方法可以动态创建新类型,并使用反射从另一种类型添加属性。

我看过使用文本字符串通过 Roslyn 创建新类型的示例。但是,我不想使用一串文本。我宁愿使用纯代码定义一个类型。然后,我想使用反射来 1) 获取第三方类的这个属性列表,以及 2) 将它们添加到我的新类型中。

我知道如何使用反射从类型中获取属性列表。但是,我不确定如何使用 Rosalyn 来 1) 创建新类型和 2) 向该类型添加新属性。这在 .NET Core 世界中甚至可能吗?我知道那是在 .NET pre-.NET Core 时代。但是,我似乎无法弄清楚如何在 .NET Core 中执行此操作。

最佳答案

假设您有这个第三方类:

class SomeThirdPartyClass
{
    public object Foo { get; set; }
    public object Bar { get; set; }
}

如果您需要添加属性,只需将其子类化并添加它们:

class MyClass : SomeThirdPartyClass
{
    public string Name { get; set; }
    public string Description { get; set; }
}

//Example use
var o = new MyClass();
o.Name = "Name";           //Custom property
o.Foo = new object();      //Base property

如果第三方类是sealed ,您可以将其包装起来。

class MyClass<T>
{
    public string Name { get; set; }
    public string Description { get; set; }
    public T Item { get; set; }
}

//Example use
var o = new MyClass<SomeThirdPartyClass>
{
    Item = new SomeThirdPartyClass()
};
o.Name = "name";            //Custom property
o.Item.Foo = new object();  //Base property

关于c# - 通过 Roslyn 在 C# 中从另一个类创建一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54636050/

相关文章:

c# - 这种类型的数据具有内置行为,不能以这种方式添加到模型中 : System. Int64

c# - 查找正则表达式以获取具有文件扩展名的子字符串

c# - 如果值存在则获取行数

java - 如何将泛型类传递给 Java 中的方法?

javascript - 如何在Javascript中动态获取网页的DOM

javascript - jquery ui 动态对话框

php - 使用php mysql动态显示图像

c# - 异步等待性能?

c# - 在 Multi-Tenancy 系统中按租户控制队列并发

swift - 根据 UIButton 的内容(主要是标题和图像)自动调整其大小的最佳方法是什么?