C#linq查找对象

C#的语法和java非常类似,但是他拥有非常多的语法糖,比如声明类的时候set/get的简单写法,而在java中需要特定的插件lombok支持,而使用lombok插件有一个很大的缺点,就是协同开发的人都要安装,否则程序就会报错,还有一点覆盖方法C#使用override关键字,而java使用的是注解

class Person
{
    public int gender { get; set; }

    public int age { get; set; }

    public string name { get; set; }

    //必须提供无参构造
    public Person()
    {
    }

    public Person(string name, int gender, int age)
    {
        this.gender = gender;
        this.age = age;
        this.name = name;
    }
    public override string ToString()
    {
        return "Person{" +
              "name='" + name + '\'' +
              ", gender=" + gender +
              ", age=" + age +
              '}';
    }
}

弄完了类声明,然后就是创建对象初始化列表,和java的实现方法大同小异,但是我并没有使用下面的工厂方法,而是使用了对象初始化的写法,他非常类似于js里面对象字面值的快速赋值语法,但是其实他是对无参构造函数的补充,必须显示声明无参构造函数,对比有参构造函数他是不用考虑顺序的,另外也可以使用类型推断var去声明一个对象,这些类脚本语言的特性竟然被官方支持,不得不说是一大惊喜

//对象初始化
//var p = new Person() { gender = 1, name = "a", age = 1 };

//工厂方法
Person giveMePerson(string name, int gender, int age)
{
    return new Person(name, gender, age);
}

var ps = new Person[]
{
    new Person(){ name= "小萌", gender = 1, age = 19 },
    new Person(){ name= "小强", age = 23, gender = 1 },
    new Person(){ gender = 2, name = "小爱", age = 15 },
    new Person(){ gender = 2, age = 18 , name = "小A" }
};

List<Person> plist = ps.ToList();

var result1 = plist.Where(predicate: person => {
    return person.name.Contains("A") && person.gender == 2;
}).First();

List<Person> result2 = plist.Where(predicate:person =>
{
    return person.age > 10 && person.gender == 1;
}).ToList();

Console.WriteLine(result1);
Console.WriteLine("---------------------------------------");

result2.ForEach(action: person =>
{
    Console.WriteLine(person);
});

然后就是List列表对象的Where方法,他和C#linq从入门到放弃中用到的Select方法都是linq原始写法的封装,他接受一个委托对象predicate作为参数,是找对象的几个常用的方法,最后迭代器的写法和java也是一样的,这里又体现了一个和java不一样的地方,这是Where的方法签名

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)

Where是静态方法,但是却可以被对象实例调用,在java中静态方法不保存this,也不能为对象实例调用,只能用类调用,最后还记得result1和result2的值是啥不

控制台输出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

free5156

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值