c# - 在其成员函数之一中进一步约束泛型类c#

标签 c# oop generics

这里对泛型缺乏经验。如果方法的类型位于其类型层次结构的更下方,我是否能够对方法的类型进行比其类约束更多的约束?

这是我尝试过的(BotAccountDetailsBase 派生自 AccountDetailsBase):

  public class SafeOffer<TAcc> where TAcc : AccountDetailsBase
  {
    public readonly TAcc account_;
    public readonly List<ItemData> items_;

    private SafeOffer(TAcc account, List<ItemData> items)
    {
      account_ = account;
      items_ = items;
    }

    public static List<SafeOffer<TAcc>> DivideOffer<TBot>(IEnumerable<BotAccountDetailsBase> accounts, List<ItemData> items) where TBot : BotAccountDetailsBase
    {
      var accounts_to_trade = new List<SafeOffer<TBot>>();

      // get the bots of the right type, order by slots
      var typed_account = accounts.OfType<TBot>().OrderByDescending(x => x.slotsleft_);

      foreach (var acc in typed_account)
      {
        if (items.Count > 0)
        {
          var bundle = items.Take(acc.slotsleft_);
          items.RemoveAll(x => bundle.Contains(x));
          var offer = new SafeOffer<TBot>(acc, bundle.ToList());
          accounts_to_trade.Add(offer);
        }
      }
      return accounts_to_trade;
    }
  }

由于 TAcc 和 TBot 不同,因此无法编译。有什么我可以使用的魔法吗?

最佳答案

只需将返回类型更改为 List<SafeOffer<TBot>> :

public static List<SafeOffer<TBot>> 
    DivideOffer<TBot>(IEnumerable<BotAccountDetailsBase> accounts, List<ItemData> items) 
        where TBot : BotAccountDetailsBase

关于c# - 在其成员函数之一中进一步约束泛型类c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31539989/

相关文章:

java - 如何通过检查找到返回类型的参数化类型?

JavaFX 泛型在自定义 Consumer 和每个 Consumer 所需的类型之间不兼容

c# - 如何使用 HTMLTextWriter 创建间距和缩进?

c# - 如何在插件环境中正确使用枚举和/或自定义对象

python - 为什么在 Python OOP 中使用 Getters/Accessors 是(或不是)好的做法?

java - 如何通过依赖注入(inject)和垃圾收集来防止循环引用?

java - 返回通用结果<Foo<Bar>>

c# - 如何将数据从datatable更新到sql表?

c# - 无法将类型 'void' 隐式转换为 System.Windows.Forms.MouseEventHandler

java - 仅在 oop 中将方法的范围限制到另一个类