【问题标题】:Assing values from Dictionary to IList (C#, WPF) [duplicate]将字典中的值分配给列表(C#,WPF)[重复]
【发布时间】:2021-06-16 21:23:04
【问题描述】:

我得到了方法的接口:

Task<Dictionary<long, Cars>> GetCars();

我有虚拟机:

private IList<Cars> m_cars;

public IList<Cars> MyCars
{
   get => m_cars;
}

还有一些方法:

public override void Load()
{
  MyCars = someservice.GetCars();
}

但我做不到。如何从DictionaryIList 赋值?

【问题讨论】:

  • GetCars 是异步的,Load 不是。 GetCars 是否需要异步,如果需要,您是否也可以使 Load 异步?
  • @Self 部分,但 GetCars 返回 Task&lt;Dictionary&lt;long, Cars&gt;&gt; 而不是 Dictionary&lt;long, Cars&gt;
  • 恐怕改不了Load()
  • 那么您可能应该阅读以下内容:stackoverflow.com/questions/9343594/…
  • 没人会提到how to assing values

标签: c# list dictionary task


【解决方案1】:
public async override void Load()
{
    var dictionary = await someservice.GetCars();
    MyCars = dictionary.Values.ToList();
}

如果你因为某种未知的原因不能将方法标记为async,因此不能调用await,你必须同步调用异步方法GetCars(),这是不推荐的,因为为什么会这样同步调用时是异步的。

为此,您只需调用.ResultTask

public override void Load()
{
    MyCars = someservice.GetCars().Result.Values.ToList();
}

这里是给定选项的演示

https://dotnetfiddle.net/XCqiLY

【讨论】:

  • async void?现在如果在GetCars 完成之前再次访问MyCars 会发生什么?
  • @JohnathanBarclay - 我假设 Load 是一个事件处理程序,也许我假设不正确 - 如果不是这种情况,OP 可能想在这里阅读 - stackoverflow.com/questions/19415646/… - 关于 MyCars 我不知道真的不在乎在这种情况下会发生什么,如果它没有被填充,它将为空,OP 的代码不会给我任何线索,如果这可以与否
  • 好吧,也许是,也许不是,但是应该说明这个假设,因为只有事件处理程序应该是async void。此外,MyCars 是仅获取的,因此无法编译。
  • 但是MyCars = someservice.GetCars(); 在操作码中,他说它不能改变它,所以我猜它以某种方式编译,不是吗?也许只是另一个错字。集被删除了
  • @Self 不,OP 的代码由于多种原因肯定无法编译。 OP只声明Load的返回类型不能改变。
猜你喜欢
  • 2021-04-02
  • 2018-08-20
  • 2019-03-14
  • 2021-12-27
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多