gpt4 book ai didi

c# - 当参数值作为接口(interface)传递时,如何解析泛型参数的类类型?

转载 作者:行者123 更新时间:2023-11-30 20:22:47 25 4
gpt4 key购买 nike

考虑一个具有以下签名的方法:

void foo(List<T> myList) ...

假设,通过使用反射,您需要构造这样一个函数并获取T 类型参数的PropertyInfo 详细信息。调用 typeof(T).GetProperties(...) 应该可以解决问题,因此我们可以将以下行添加到我们的方法中,以获取这些详细信息。

void foo(List<T> myList)
{
PropertyInfo[] props =
typeof(T).GetProperties(BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.FlattenHierarchy);

...
}

这提供了我们需要的信息...除非 T 是接口(interface)参数,我发现 props 只包含接口(interface)属性而不是与列表中的类关联的属性,它继承自接口(interface)。

明确地说,我的接口(interface)和我的类定义是公开的,就像我的类中的属性一样。

如何获取与继承接口(interface)的实际类型关联的属性,而不是严格的接口(interface)属性?

最佳答案

如果你想要实际的类型,你可能需要为每个项目获取它:

foreach (T t in myList)
{
Type itemType = t.GetType();

itemType.GetProperties(...)
// etc.
}

您还可以为不同类型添加特定代码:

if(itemType == typeof(MyConcreteType))
{
// do specific stuff for that type
}

关于c# - 当参数值作为接口(interface)传递时,如何解析泛型参数的类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30482154/

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