如何从包含 getter 中的 int 变量的 List<class> 填充 List<int>

Posted

技术标签:

【中文标题】如何从包含 getter 中的 int 变量的 List<class> 填充 List<int>【英文标题】:How to populate List<int> from List<class> that contains int variable in getter 【发布时间】:2022-01-17 20:25:57 【问题描述】:

例如:

public List<Data> dataList;
public List<int> idList;

public class Data

  public int id;
  public string name;

我需要将所有“id”变量从“dataList”获取到“idList”。 类似的东西

public List<Data> dataList;
public List<int> idList

 get 
 
   for (int i = 0; i < dataList.Count; i++)
   
     idList.Add(dataList[i].id);
   

   return idList
 
;

但是如何以更好的方式优化呢?

我尝试创建本地列表,用 id 填充它,然后将其提供给“idList”。但是我觉得这个方法没有优化

【问题讨论】:

使用 LINQ docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…。在这种情况下idList = dataList.Select(d =&gt; d.id).ToList(); 我认为如果没有很好的理由,你根本不应该做这样的事情,因为数据已经存在于你的类中并且很容易访问。 But how to optimize this in a better way? .. 你的意思是如何让它不以异常结束? ;) 目前您在 getter 中递归访问 idList ^^ 【参考方案1】:

您可以为此使用 Linq Select

public List<Data> dataList;
public List<int> idList

  get 
  
    return dataList.Select(x => x.Id).ToList();
  ;

以更紧凑的方式

public List<int> idList => dataList.Select(x => x.Id).ToList();

更多关于 LINQ here.

【讨论】:

谢谢,这就是我想要的。完全忘记了LINQ。尝试以通常的方式完成。 非常欢迎我的朋友@КириллДосын 这确实是我会做的 ..@КириллДосын 但请注意,现在这与“手动”编写它的方式不同 .. 它与使用 for 循环写出一样有效(或者如果您使用正确的容量初始化列表);)

以上是关于如何从包含 getter 中的 int 变量的 List<class> 填充 List<int>的主要内容,如果未能解决你的问题,请参考以下文章

为什么不能将包含int和long变量的算术表达式的结果分配回int变量?

从比较函数访问成员变量/getter

NSFetchedResultsController 中的 NSPredicate 不使用 Category 的 getter

c++中如何把string类型转化为float类型

成员变量/方法/ getter和setter是否可以包含在一个公共访问修饰符中?

Solidity - 为啥公共 Struct 变量的默认 getter 不会返回 Struct 中的每个变量