【问题标题】:How to create an assignment between a type and a generic representation of the type如何在类型和该类型的泛型表示之间创建赋值
【发布时间】:2021-05-31 18:07:45
【问题描述】:

我有一个难以表达的编码问题,因此将显示代码示例。

代码 1:

public struct PlayerData {
   public int PlayerScore;
}

代码 2:

public class Player {
    public PlayerData PD {get; set;}
  .......
}

代码 3:

public class SaveData {
....
    public PlayerData Load (){
    .....
    }
}

最后,在代码 4 中,我说:

_player.PD = _saveData.Load();

但是代码 3 中的返回类型发生了变化,现在是: 代码 3(已更改):

     public class SaveData {
....
    public IPromise<PlayerData> Load (){
     ......
     return Promise<PlayerModelDto>.Resolved(dt);
    }
}

现在我还需要写:

 _player.DP = _saveData.Load(); 

但出现错误“无法将“IPromise(PlayerData) 转换为 PlayerData”

如何将 IPromise 范围内的结构分配给具有该结构属性的类?

谢谢。

【问题讨论】:

  • IAsyncLoad&lt;T&gt;的接口定义是什么?我猜有一个Result 属性会返回您的T。即一个 PlayerData 结构。您可能还想查找asyncawait
  • IAsynchLoad是你自己的界面吗?因为我在 .Net 库中找不到它。如果它是您自己的接口,那么您将需要向它添加一个属性以公开其 PlayerData 对象。
  • 嗨@RBarryYoung 我已经编辑了我的问题 - 接口是来自 RealSeriousGames 库的 IPromise 接口,承诺统一。感谢您指出不使用实际库的问题
  • 该问题缺乏足够的细节来提供有用的答案。不过有一些注意事项:当你写 "to be equal to" 时,看起来你真正想要的是一个assignment。尽管运算符相似,但为了准确表达您的问题,请不要将 equalityassignment 混淆,这一点非常重要。它们是两种完全不同的东西。其次,基于名称IPromise,似乎这里引入了某种异步。如果是这种情况,那么您将不得不调整代码以适应这种情况。这里通常的 C# 习惯用法会...
  • ... 基于Task,这是 .NET 中“承诺”或“未来”的等价物(在其他上下文中经常用于描述相同事物的术语),并且您将使用await 运算符引入异步等待Task 的解决/完成。在上面的上下文中,不清楚JsonUtilityPromise 等是什么。您的问题并不是关于 C# 语言和您收到的错误消息,而是关于如何使用这些第三方类型和对象。请改进问题。

标签: c# asynchronous generics promise


【解决方案1】:

我不熟悉这种范例,但阅读文档类似于

_saveData.Load()
.Then(pd => _player.DP = pd);

应该可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多