分享一道C#使用委托来求最大值的面试题你会不?

简介: 求最大值的面试题
需求:

对一个数组进行处理,获取其中最大值,但是类型不定,“最大值”的算法也不一样。使用委托把最大算法稳定下来,把比较规则通过委托进行“开放”?
微信截图_20211209145031.png

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestConsole
{

    class Program
    {
        delegate bool CompareNum(object obj1, object obj2);
        static void Main(string[] args)
        {
            object[] objs = { 1, 2, 4, 4, 2, 1, 2, 3 };
            //通过这样写,获取最大值的算法已经确定,在传参数的是后指定上比较方法就好了
            //用委托后,我们不在为每个获取最大值的方法都去写一种算法
            int max=(int)GetMax(objs, CompareInt);//原生的写法为GetMax(objs,new CompareNum(CompareInt));//只不过编译器帮我们进行了处理
            Console.WriteLine(max);
            Console.ReadKey();
        }
        static bool CompareInt(object obj1, object obj2)
        {
            int i1 = (int)obj1;
            int i2 = (int)obj2;
            return i1 > i2;
        }
        static object GetMax(object[] obj, CompareNum cpn)
        {
            object max = obj[0];
            for (int i = 1; i < obj.Length; i++)
            {
                if (!cpn(max, obj[i]))
                {
                    max = obj[i];
                }
            }
            return max;
        }
    }
}
AI 代码解读

使用匿名方法改造GetMax方法

    {
        delegate bool CompareNum(object obj1, object obj2);
        static void Main(string[] args)
        {

            object[] objs = { 1, 2, 4, 4, 2, 1, 2, 3 };
           
            CompareNum cpn = delegate (object obj1, object obj2)
            {
                int i1 = (int)obj1;
                int i2 = (int)obj2;
                return i1 > i2;
            };         
            int max = (int)GetMax(objs, cpn);//使用匿名方法
            Console.WriteLine(max);
            Console.ReadKey();
        }
        static bool CompareInt(object obj1, object obj2)
        {
            int i1 = (int)obj1;
            int i2 = (int)obj2;
            return i1 > i2;
        }
        static object GetMax(object[] obj, CompareNum cpn)
        {
            object max = obj[0];
            for (int i = 1; i < obj.Length; i++)
            {
                if (!cpn(max, obj[i]))
                {
                    max = obj[i];
                }
            }
            return max;
        }
    }
}
AI 代码解读

其实还可以更简略,比如lamda...

目录
打赏
0
0
0
0
1
分享
相关文章
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
228 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
【干货】一份10万字免费的C#/.NET/.NET Core面试宝典
C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成。该份基础面试宝典完全免费,发布两年来收获了广大.NET小伙伴的好评,我会持续更新和改进,欢迎关注我的公众号【追逐时光者】第一时间获取最新更新的面试题内容。
413 1
一文搞懂:一道关于C#linqwhere的面试题
一文搞懂:一道关于C#linqwhere的面试题
81 0
常见20道C#面试的题
常见20道C#面试的题
113 1
|
10月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
275 8
|
11月前
|
C++智能指针解析
C++智能指针解析
127 0
C++智能指针解析
|
11月前
|
结构型设计模式
结构型设计模式
137 0
结构型设计模式
|
11月前
|
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
136 4
|
11月前
|
C#
C#中的委托(一)
C#中的委托(一)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等