gpt4 book ai didi

C# 反射 : Type cast method return value in specific type of object list

转载 作者:行者123 更新时间:2023-11-30 21:34:57 26 4
gpt4 key购买 nike

我有以下汇编,其中包含以下数据

demo.dll

1 级

namespace demo

public class Data
{
public string FirstName {get; set;}
}

2 级

namespace demo

public class Utility
{
private List<Data> items;

public Utility()
{
items = new List<Data>();
items.add(new Data(){ FirstName = "Abc" });
}

public List<Data> GetItems()
{
return items;
}
}

现在我想加载上面的 demo.dll 使用运行时进行汇编并调用 GetItem() 方法。

为此,我可以编写以下代码

Assembly assembly = Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ,"demo.dll"));

Type Utility= assembly.GetType("demo.Utility");
Type Data= assembly.GetType("demo.Data");

MethodInfo GetItems = Utility.GetMethod("GetItems");

object utility = Activator.CreateInstance(Utility);

object returnValue = GetItems.Invoke(utility, null);

现在我想在类型为数据的列表中的 returnValue 上方进行强制转换,并访问 FirstName 属性。

我如何使用反射实现这一点?

最佳答案

假设你写的所有东西都可以工作

object returnValue = GetItems.Invoke(utility, null);

returnValue实际上是一个 List<Data> , 但你不能转换它,因为在编译时编译器没有 Data 的类型信息。类(class)。但是由于List<T>工具 IList你可以转换到它并迭代它的项目(IEnumerable<object> 也应该工作)。

然后你可以再次使用反射来访问FirstName属性:

var returnValue = (IList)GetItems.Invoke(utility, null);

foreach (var item in returnValue)
{
var type = item.GetType();
var property = type.GetProperty("FirstName");
var firstName = property.GetValue(item);
}

关于C# 反射 : Type cast method return value in specific type of object list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com