我有一个引用多个第三方库的 .NET Core C# 应用程序。这些库中的每一个都有一个我需要在我的应用程序中使用的对象。有一个问题,我的数据库有两个属性与第三方库中我需要的每个类中的每个属性相关联。这两个属性是 Name
和 Description
。
在理想情况下,这些第三方库中的每一个都将使用具有Name
和Description
的my 基类:)。由于这不会发生,我想知道 .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/