c#学习笔记006days

一级目录

  1. LINQ表达式
  2. 反射type
  3. 特性

LINQ表达式

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;

public class Student
{
   public  string  Name { set; get; }
    public int Age { set; get; }
    public string GongFu { set; get; }

    public override string ToString()
    {
        // return $"name:{ Name},Age:{Age},GongFu:{ GongFu}";
        return string.Format("name:{0},Age:{1},GongFu:{2}", Name, Age, GongFu);
    }
}
public class GongFu
{
    public string Name { set; get; }
    public int ShangHai { set; get; }
    public override string ToString()
    {
        
        return string.Format("name:{0},ShangHai:{1}", Name,ShangHai);
    }
}

namespace 武学功夫
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Student> str = new List<Student>
        {
            new Student{Name="小明",Age=18,GongFu="葵花宝典" },
              new Student{Name="小红",Age=28,GongFu="祥龙十八掌" },
              new Student{Name="小a",Age=18,GongFu="祥龙十八掌" },
              new Student{Name="小b",Age=8,GongFu="祥龙十八掌" },
              new Student{Name="小c",Age=48,GongFu="祥龙十八掌" },
                new Student{Name="老王",Age=113,GongFu="六脉神剑" },
            new Student{Name="张三",Age=13,GongFu="葵花点穴手" },
              new Student{Name="李四",Age=11,GongFu="金刚不坏" },


        };
            List<GongFu> fu = new List<GongFu>
        {
            new GongFu{Name="葵花宝典",ShangHai=86 },
              new GongFu{Name="祥龙十八掌",ShangHai=70 },
                new GongFu{Name="六脉神剑",ShangHai=99 },
            new GongFu{Name="葵花点穴手", ShangHai=46},
              new GongFu{Name="金刚不坏", ShangHai=66},
        };
            //1.查询
            //var str1 = from m in str
            //           from k in fu
            //        where m.GongFu==k.Name&&k.ShangHai>70
            //           select new { str=m,fu=k};
            //var str1= str.Where(sdsd =>  sdsd.Age > 50);
            // var str1=  str.SelectMany(m => fu, (m, k) => new { str = m, fu = k }).Where(x=>x.fu.Name==x.str.GongFu&&x.str.Age>100);//查找
            //2.排序

            //var str1 = from m in str
            //           where m.Age >5
            //          // orderby m.Age,m.Name//多个字段进行排序,先按照年龄,后按照名字
            //           orderby m.Age descending//从大到小进行排序
            //           select m;

            // var str1 = str.Where(m => m.Age > 50).OrderBy(m => m.Age).ThenBy(m => m.Name);
            //倒序OrderByDescending
            //3.联合查询
            //var str1 = from m in str
            //           join n in fu on m.GongFu equals n.Name
            //           select new { str = m, fu = n };
            4.对结果进行分组查询
            //var str1 = from n in fu
            //           join m in str on n.Name equals m.GongFu
            //           into groups
            //           orderby groups.Count()
            //           select new { fu = n, count = groups.Count() };

            //按照自身字段进行分组group
            var str1 = from m in str
                       group m by m.GongFu into g
                       select new { count = g.Count() ,key=g.Key};//g.Key表示按照哪个属性进行分的组
               //5.量词操作符
               //判断是否存在祥龙十八掌   
           bool a= str.Any(m => m.GongFu== "祥龙十八掌");
            Console.WriteLine(a);
            //判断是否全部都是祥龙十八掌
            bool b =str.All(m => m.GongFu == "祥龙十八掌");
            Console.WriteLine(b);


            foreach (var item in str1)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
         


        }
    }
}

反射type

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

namespace 反射和特性type
{
    class Program
    {
        static void Main(string[] args) {
            每一个类对应一个type对象,这个type对象存储了这个类 有哪些方法跟哪些数据 哪些成员
            //    Myclass my = new Myclass();
            //    Type type = my.GetType();//通过对象来获取这个对象所在类的Type对象
            //    Console.WriteLine(type.Name);//获取类的名字
            //    Console.WriteLine(type.Namespace);//获取所在的命名空间
            //    Console.WriteLine(type.Assembly);
            //    FieldInfo[] array=  type.GetFields();//只能获取pubilc字段
            //    Console.WriteLine("-----------下面为类的字段-----------");
            //    foreach(FieldInfo info in array)
            //    {

            //        Console.WriteLine(info + "  ");
            //    }
            //    PropertyInfo[] infos = type.GetProperties();
            //    Console.WriteLine("-----------下面为类的属性-----------");
            //    foreach (PropertyInfo info in infos)
            //    {

            //        Console.WriteLine(info + "  ");
            //    }
            //    MethodInfo[] infos1 = type.GetMethods();
            //    Console.WriteLine("-----------下面为类的方法-----------");
            //    foreach (MethodInfo info in infos1)
            //    {

            //        Console.WriteLine(info + "  ");
            //    }
            //通过type对象可以获取它对应的类的所有成员(pubilc)


            Myclass my = new Myclass();
            Assembly assem = my.GetType().Assembly;//通过类的type对象获取它所在的程序集Assembly
            //还可以根据程序集的名字加载程序集
            //Assembly assembly1 = Assembly.Load("SomeAssembly");
            //根据路径也可以
           // Assembly assembly2 = Assembly.LoadFile(@"c:\d\d\");
            Console.WriteLine(assem.FullName);
          Type[] types=  assem.GetTypes();
            foreach(Type ty in types)
            {
                Console.WriteLine(ty);
            }

            Console.ReadKey();
        }
    }
}

特性

#define Istext  //定义一个宏
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
特性
{//1.特性类的后缀以Attribute结尾
 //2.需要继承自System.Attribute
 //3.一般情况下声明为sealed
 //4.一般情况下 特性类用来表示目标结构的一些状态(定义字段或者属性,一般不定义方法)
    [AttributeUsage(AttributeTargets.Class)]//表示该特性类可以应用到的程序结构有哪些
    sealed class MytextAttribute : System.Attribute
    {
        public string A { set; get; }
        public int Id { set; get; }
        public MytextAttribute(string str)
        {
            this.A = str;

        }
    }
}

namespace 特性
{    //通过特定属性的名字,给属性赋值,这种是命名参数
    [Mytext("简单的特性类",Id =50)]//当我们使用特性的时候,后面的Attribute不用写
    class Program
    {//[Obsolete("这个方法过时了,使用NewMethod代替")]//表示一个方法被弃用了,但是仍然可以用
        [Obsolete("dd",true)]//这个这个方法就不能被调用了
        static void OldMethod()
        {
            Console.WriteLine("OldMethod");

        }
        static void NewMethod()
        {
            Console.WriteLine("NewMethod");

        }
        [Conditional("Istext")]//若程序开头没有定义Istext的宏,则不会调用text1
        static void text1()
        {
            Console.WriteLine("text1");
        }
        static void text2()
        {
            Console.WriteLine("text2");
        }
        [DebuggerStepThrough]//可以跳过debugger的单步调试 不让进入该方法(当我们确定这个方法没有任何错误的时候,可以用这个)
        static void PrintOut(string str,[CallerFilePath]string filename=" ",
            [CallerLineNumber] int linenumber=0,[CallerMemberName] string mathodName="")
        {
            Console.WriteLine(str);
            Console.WriteLine(filename);//路径
            Console.WriteLine(linenumber);//运行行
            Console.WriteLine(mathodName);
        }


        static void Main(string[] args) {
            //
            //    text1();
            //    text2();
            //    text1();
            //PrintOut("小明");

            Type type = typeof(Program);//通过typeof+类名特可以获取type对象
           object[] array= type.GetCustomAttributes(false);
           MytextAttribute mytext= array[0] as MytextAttribute;
            Console.WriteLine(mytext.A);
            Console.WriteLine(mytext.Id);
            Console.ReadKey();
          
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值