gpt4 book ai didi

c# - 查找属于同一通用类的所有属性

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

如果您不熟悉 Entity Framework ,它会生成一个看起来像这样的类

public partial class contextontext : DbContext
{
public virtual DbSet<foo> foo { get; set; }
public virtual DbSet<bar> bar { get; set; }
//Etc, there could be lots of these DbSet properties
}

我正在尝试构建一个类型列表,其中有 DbSet<T>的集合,但我不确定如何检查泛型类型。我使用 PropertyType.ToString().StartsWith("System.Data.Entity.DbSet`1") 让它工作但这似乎是一种困惑且不必要的复杂方法。这是我用来获取属性的完整 LINQ。

foreach (var property in context.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Where(p => p.PropertyType.ToString().StartsWith("System.Data.Entity.DbSet`1")))
{
Type type = property.PropertyType.GenericTypeArguments[0];

//other stuff...
}

我在属性对象中四处寻找,但没有找到任何线索。有一个Type在那里,但这始终是通用 DbSet 的特定于类型的实现(应该如此)。无论它是什么类型,我如何检查它是否是通用集合?

最佳答案

我想你只是想:

var propertyType = property.PropertyType;

if (propertyType.IsGenericType
&& propertyType.GetGenericTypeDefinition() == typeof(DbSet<>))
{
// ...
}

我现在看到你的 Where在你的代码中最右边。那将是:

.Where(p => p.PropertyType.IsGenericType
&& p.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>))

method GetGenericTypeDefinition 从具体构造的(“封闭的”)泛型类型(例如 DbSet<foo> )到类型的定义(此处为 DbSet<TEntity> )。

关于c# - 查找属于同一通用类的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31416696/

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