C# 在泛型类的一个成员函数c中进一步约束泛型类#
在这里没有泛型的经验。如果一个方法的类型继承权较低,我是否能够比它的类约束更严格地约束它的类型 以下是我尝试的内容(BotAccountDetailsBase源自AccountDetailsBase):C# 在泛型类的一个成员函数c中进一步约束泛型类#,c#,oop,generics,C#,Oop,Generics,在这里没有泛型的经验。如果一个方法的类型继承权较低,我是否能够比它的类约束更严格地约束它的类型 以下是我尝试的内容(BotAccountDetailsBase源自AccountDetailsBase): 公共类安全优惠,其中TAcc:AccountDetailsBase { 公共只读TAcc账户; 公共只读列表项; 私人保险箱优惠(TAcc账户、清单项目) { 账户=账户; 项目=项目; } public static List DivideOffer(IEnumerable accounts,
公共类安全优惠,其中TAcc:AccountDetailsBase
{
公共只读TAcc账户;
公共只读列表项;
私人保险箱优惠(TAcc账户、清单项目)
{
账户=账户;
项目=项目;
}
public static List DivideOffer(IEnumerable accounts,List items),其中TBot:BotAccountDetailsBase
{
var账户到交易=新列表();
//获取正确类型的机器人,按插槽排序
var typed\u account=accounts.OfType().OrderByDescending(x=>x.slotsleet\ux);
foreach(类型化账户中的var acc)
{
如果(items.Count>0)
{
var bundle=项目数量(根据slotsleet_uu2;);
RemoveAll(x=>bundle.Contains(x));
var offer=新的SafeOffer(acc,bundle.ToList());
账户到交易。添加(报价);
}
}
将账户返回至交易;
}
}
因为TAcc和TBot不一样,所以它不编译。我可以使用魔法施法吗?只需将返回类型更改为
列表即可:
公共静态列表
DivideOffer(IEnumerable帐户、列表项)
其中TBot:BotAccountDetailsBase
您能否创建一个自己编译(或不编译)的示例,而不依赖于大量未发布在此处的类?我对修补代码很感兴趣,但我不会创建所有缺少的类。A会有帮助的。在这种情况下你真的需要泛型吗?基础还不够吗?我发誓我试过:)
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;
}
}
public static List<SafeOffer<TBot>>
DivideOffer<TBot>(IEnumerable<BotAccountDetailsBase> accounts, List<ItemData> items)
where TBot : BotAccountDetailsBase