【问题标题】:How to populate List<int> from List<class> that contains int variable in getter如何从包含 getter 中的 int 变量的 List<class> 填充 List<int>
【发布时间】: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 ^^

标签: c# list unity3d getter-setter


【解决方案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 循环写出一样有效(或者如果您使用正确的容量初始化列表);)
猜你喜欢
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多