【问题标题】:Codition in list with GetType带有 GetType 的列表中的条件
【发布时间】:2023-03-31 21:09:01
【问题描述】:

我想在此处添加一个条件以仅获取类型!= Int。

List<IMyLayouts> list = query.GetType().
GetProperties(BindingFlags.Public).
Select(l => (IMyLayouts)l.GetValue(query, null)).ToList();

但是

.Where(l => (IMyLayouts)l.GetTYpe() != typeof(int)

它不起作用,我在互联网上搜索它但我找不到任何东西:|

【问题讨论】:

  • 您确定上一个.Where 语句中的所有类型都可以转换为IMyLayouts 吗?为什么在尝试输入 check vs int 时会进行这种转换?
  • 1) . 优先于演员阵容,所以您将l.GetTYpe()GetTYpe 是什么?)转换为IMyLayouts - GetTYpe 是否返回将转换的内容? 2)您正在将 IMyLayoutstypeof(int) 进行比较,但这永远无法匹配 - IMyLayouts 不是 Type 对象 3)您的第一个查询查询将所有公共属性的 GetValue 转换为 IMyLayouts 但您显然知道有些是int,所以这也是不正确的。
  • 在 IMyLayouts 我有不同类型的公共属性,例如LayoutEmployee、LayoutEmployer 等。我想返回除 int 以外的所有类型
  • 这能回答你的问题吗? Linq find all with certain type

标签: c# asp.net .net-core


【解决方案1】:

我不确定您的目标是什么,但如果您只想在列表中查找整数类型,您可以使用 oftype 方法。

例如你可以这样做:

var intList = from s in mylist.OfType<int>()  
select s;  
foreach (var item in intList)  
{  
   Console.WriteLine(item);  
} 

它也适用于复杂的对象。我们假设 Customer 是一个类或接口。比你可以做的如下:

var customerList = from s in mylist.OfType<Customer>()  
select s;  
foreach (var customer in customerList)  
{  
   Console.WriteLine(customer.Name);  
 }

更新

要在一个类中查找除整数类型之外的所有已定义类型,您可以执行以下操作

IEnumerable<System.Reflection.PropertyInfo> types = typeof(MyClass).GetProperties().Where(p => p.PropertyType != 
typeof(int));

【讨论】:

  • 我想返回除 int 以外的所有类型
  • @jrJerry 看看我添加的代码示例。此代码查找除整数类型之外的类中定义的所有类型。
  • 如何保存到列表
  • @jrJerry 你是什么意思?在你运行我给你的代码后,你会得到一个 PropertyInfo 列表,其中包含关于你的属性的信息。您可以根据需要保存它们。什么是 IMyLayouts?
  • 我的错误,请原谅我@nzrytmn。成功了,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多