gpt4 book ai didi

c# - 当我只知道集合的类型时,如何在 T 的 c# 通用集合中找到 T 的类型?

转载 作者:太空狗 更新时间:2023-10-29 18:20:45 25 4
gpt4 key购买 nike

我有一个 PropertyInfo 数组,表示类中的属性。其中一些属性的类型为 ICollection<T> ,但 T 因属性而异 - 我有一些 ICollection<string> , 一些 ICollection<int>

我可以轻松识别哪些属性属于 ICollection<> 类型通过对类型使用 GetGenericTypeDefinition() 方法,但我发现无法获取 T 的类型 - 上面示例中的 int 或 string。

有办法吗?

IDocument item
PropertyInfo[] documentProperties = item.GetType().GetProperties();
PropertyInfo property = documentProperties.First();
Type typeOfProperty = property.PropertyType;

if (typeOfProperty.IsGenericType)
{
Type typeOfProperty = property.PropertyType.GetGenericTypeDefinition();

if (typeOfProperty == typeof(ICollection<>)
{
// find out the type of T of the ICollection<T>
// and act accordingly
}
}

最佳答案

如果你知道它会是 ICollection<X>但不知道 X,使用 GetGenericArguments 很容易:

if (typeOfProperty.IsGenericype)
{
Type genericDefinition = typeOfProperty.GetGenericTypeDefinition();

if (genericDefinition == typeof(ICollection<>)
{
// Note that we're calling GetGenericArguments on typeOfProperty,
// not genericDefinition.
Type typeArgument = typeOfProperty.GetGenericArguments()[0];
// typeArgument is now the type you want...
}
}

当类型是某种实现的类型时,它会变得更难 ICollection<T>但本身可能是通用的。听起来你的位置更好:)

关于c# - 当我只知道集合的类型时,如何在 T 的 c# 通用集合中找到 T 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7283383/

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