You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linq相关问题:按对象类型排序列表及分组后CS1503类型转换错误

问题解答

问题1:如何使用Linq按对象类型对List<>进行排序?

直接通过OrderBy结合对象的GetType()方法即可实现按类型排序,示例代码如下:

// 包含不同类型对象的列表
List<object> mixedObjects = new List<object>
{
    new int(456),
    new string("Test"),
    new DateTime(2024, 5, 1),
    new string("Example"),
    new double(3.14)
};

// 按类型名称升序排序
var sortedByName = mixedObjects.OrderBy(item => item.GetType().Name).ToList();

// 按Type本身排序(逻辑与按名称一致)
var sortedByType = mixedObjects.OrderBy(item => item.GetType()).ToList();

若需要降序排序,替换为OrderByDescending即可。


问题2:解决CS1503类型转换错误及重复项分组问题

错误原因

GroupBy返回的是IGrouping<string, ShopItem>类型集合,但CartItem构造函数要求传入List<ShopItem>,类型不匹配导致转换失败。此外原代码存在冗余逻辑:

  • Where(item => item.Count() > 0)完全多余,分组后的每组至少包含一个元素
  • CartItem构造函数内的GroupBy检查没必要,分组逻辑已保证同组元素Title一致

修复后的代码

public class ShopItemsSorter
{
    public IEnumerable<CartItemView> SortFromShopItemsToCartItemView(List<ShopItem> shopItemsToSort)
    {
        List<CartItem> cartItems = new List<CartItem>();
        // 直接按Title分组,移除多余的Where条件
        var groupedItems = shopItemsToSort.GroupBy(item => item.Title);
        foreach (var itemGroup in groupedItems)
        {
            // 将IGrouping转换为List<ShopItem>传入构造函数
            CartItem cartItem = new CartItem(itemGroup.ToList());
            cartItems.Add(cartItem);
        }
        return cartItems;
    }
}

public class CartItem
{
    public int Amount;
    public ShopItem ShopItem;

    public CartItem(List<ShopItem> shopitems)
    {
        ShopItem = shopitems[0];
        Amount = shopitems.Count;
        // 移除冗余的分组检查,分组逻辑已保证同组Title一致
    }
}

简化优化(可选)

用Linq链式调用省略foreach循环,代码更简洁:

public IEnumerable<CartItemView> SortFromShopItemsToCartItemView(List<ShopItem> shopItemsToSort)
{
    return shopItemsToSort
        .GroupBy(item => item.Title)
        .Select(group => new CartItem(group.ToList()))
        .ToList();
}

内容的提问来源于stack exchange,提问作者Ilona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:38