列出 RemoveLast 元素并返回它,其中 T 可为空

List RemoveLast Element and returning it with T being nullable

虽然我不太明白为什么 C# 不提供在一个命令中删除 AND return 元素的集合方法,但我尝试编写自己的自定义扩展...

    public static T RemoveLast<T>(this List<T> list)
    {
        if (list.Count > 0)
        {
            var item = list[list.Count - 1];
            list.RemoveAt(list.Count - 1);
            return item;
        }
        return null;
    }

但是,这会导致 return 行出现错误:无法将表达式类型 'null' 转换为 return 类型 'T'。

但是尝试将 T 设置为可为空 (T?) 也是不可能的。我如何更改它以使 T 可以为空?

NVM,知道了:

return default(T);

您的问题可能有不同的解决方案。一个单一的解决方案无法解决您的问题

让我们讨论适合您需求的解决方案方案

场景 1: 如果您想要 return 最后一个元素并且如果最后一个元素不存在那么您想要 return 该数据类型的默认值,那么你可以使用 return default(T);

public static T RemoveLast<T>(this List<T> list)
        {
            if (list.Count > 0)
            {
                var item = list[list.Count - 1];
                list.RemoveAt(list.Count - 1);
                return item;
            }
            return default(T);
        }

场景 2: 如果你只想为值类型创建这个函数,那么你可以像下面那样使 return value 为 Nullable

public static Nullable<T> RemoveLast<T>(this List<T> list) where T:struct
        {
            if (list.Count > 0)
            {
                var item = list[list.Count - 1];
                list.RemoveAt(list.Count - 1);
                return (T)item;
            }
            return null;
        }

此处需要指定 T 类型为结构,因为引用类型默认可为空,并且使它们可为空对编译器没有任何意义,因此编译器不会允许它