C# 如果不使用快捷方式,如何从列表中返回最低值?

C# 如果不使用快捷方式,如何从列表中返回最低值?,c#,.net,C#,.net,我得到了一个数字列表,{1,2,3,4,5,6,7}。我被要求在不使用快捷方式的情况下返回最低值,例如..Min等。您可以用老式的命令式方式执行此操作。适用于所有类似类型: public static class MyEnumerableExtensions { public static T Min<T>(this IEnumerable<T> list) where T : IComparable<T> { if (list

我得到了一个数字列表,{1,2,3,4,5,6,7}。我被要求在不使用快捷方式的情况下返回最低值,例如..Min等。

您可以用老式的命令式方式执行此操作。适用于所有类似类型:

public static class MyEnumerableExtensions
{
    public static T Min<T>(this IEnumerable<T> list) where T : IComparable<T>
    {
        if (list == null)
        {
            throw new ArgumentNullException("list");
        }
        T min = default (T);
        bool initialized = false;
        foreach (T elem in list)
        {
            if (!initialized)
            {
                min = elem;
                initialized = true;
            }
            else if (min == null) // Do not compare with null, reset min
            {
                min = elem;
            }
            else if (elem != null && min.CompareTo(elem) > 0) // Compare only when elem is not null
            {
                min = elem;
            }
        }
        if (!initialized)
        {
            throw new InvalidOperationException("list is empty");
        }
        return min;
    }
}
此外,由于Linq仅限制了Min方法,因此可能会有其他技巧。仅适用于数字:

var minViaMax = -list.Select(x => -x).Max();
var minViaAggregate = list.Aggregate(Math.Min);

我不会直接给你家庭作业问题的答案,但是为了让你开始,只需在列表上循环并跟踪你找到的最小的一个。完成后,您发现的最小值是列表中最小的值

对于你的第二部分,它只是基本的问题解决。看看这个问题,把它分成小块。例如,对于您的问题,您可以将其分解为:

如何循环浏览列表 如何记住循环之间的值 如果记忆的值小于当前循环值,如何比较 如果当前循环值较小,如何替换已记住的值
然后逐个解决每个问题。

在项目上循环,并在循环过程中跟踪最小的项目。为什么不使用所需的最小代码来解决问题?使用LINQ查找最小元素有什么不对?如果我们告诉人们不要使用最好的工具来完成这项工作,那么我们在教什么样的编程呢?什么样的代码结构可以作为快捷方式,哪些是允许的?我也删除了,你会建议我如何完善我在c语言中的技能,以适应这些类型的练习。这是第二个问题,与题目无关,范围太广。如果OP想要这个答案,他应该做一个谷歌搜索。这个想法是使用尽可能多的代码,不知道为什么。我也删除了,你会建议我如何完善我的c语言技能,以应对这些类型的练习。这是OP问题的一部分,因为这是第二个问题,与标题无关,内容太广泛。如果OP想要这个答案,他应该做一个谷歌搜索。很棒的分解!我还将去谷歌寻找C的定义content@Enigmativity.What如果列表为空?
var minViaMax = -list.Select(x => -x).Max();
var minViaAggregate = list.Aggregate(Math.Min);