在c#的一个成员函数中进一步约束泛型类

本文关键字:函数 成员 进一步 泛型类 约束 一个 | 更新日期: 2023-09-27 18:03:42

对这里的泛型没有经验。我是否能够约束方法的类型超过它的类约束,如果它进一步降低其类型层次结构?

这是我尝试的(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不相同,因此无法编译。有什么魔法可以让我用吗?

在c#的一个成员函数中进一步约束泛型类

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

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