首页 / Unity3d / C#

读一读

class Data {
    public int A { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return "A:"+A+",Name:"+Name;
    }
}

List<Data> datas = new List<Data>() {
    new Data() { A = 1,Name = "me"},
    new Data(){ A = 10,Name = "hello"},
    new Data(){ A = 5,Name = "world"}
};

var newData = from m in datas orderby m.A descending select m;
newData = datas.OrderBy(m => m.A);
foreach (var data in newData) {
    Console.WriteLine(data);
}

可以在orderby后面根据多个元素排序,用,间隔

descending表示倒序排列

第二句OrderBy是扩展方法


class Data {
    public int A { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return "A:"+A+",Name:"+Name;
    }
}

List<Data> datas = new List<Data>() {
    new Data() { A = 1,Name = "me"},
    new Data(){ A = 10,Name = "hello"},
    new Data(){ A = 5,Name = "world"}
};

var newData = from m in datas
        from n in datas
        where m.A > 5 && n.A == 1 select new{dataA = m,dataB = n};
              
var newData2 = from m in datas 
               join n in datas on m.A equals n.A 
               select new{dataA = m,dataB = n};
                
foreach (var data in newData) {
    Console.WriteLine(data);
}

使用两个from,where条件来限制联合的两条数据

这里都是同一个,所以没有联合条件

一般为m.ID == n.UId之类的

select new{dataA = m,dataB = n} 表示newData里面的元素变为例如:

data.dataA.A , data.dataB.Name

第二个联合使用了join in equals 关键字


class Data {
    public int A { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return "A:"+A+",Name:"+Name;
    }
}

List<Data> datas = new List<Data>() {
    new Data() { A = 1,Name = "me"},
    new Data(){ A = 10,Name = "hello"},
    new Data(){ A = 5,Name = "world"}
};

var newData = datas.Where(m => m.A >= 5 && m.Name =="hello");
foreach (var data in newData) {
    Console.WriteLine(data);
}

使用集合的Where方法传递一个Lambda表达式,过滤元素,m参数为每个元素代表,内容条件为true表示获取,false表示舍弃


class Data {
    public int A { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return "A:"+A+",Name:"+Name;
    }
}

List<Data> datas = new List<Data>() {
    new Data() { A = 1,Name = "me"},
    new Data(){ A = 10,Name = "hello"},
    new Data(){ A = 5,Name = "world"}
};
            
var newData = from m in datas where m.A >= 5 select m;
foreach (var data in newData) {
    Console.WriteLine(data);
}

LINQ表达式:from m in datas where m.A >= 5 select m

在集合datas中选出元素m符合A属性大于等于5的


Action aa = null;
aa  +=  test1;
aa += test2;
aa -= test1;
if(aa != null)
aa();

 

委托名 += 方法名   按循序执行

委托名 -= 方法名  删除委托引用的方法

多播委托不能有返回值,我测试了一下,有返回值的也是可以通过+来搞成多播委托的,只是返回的只有最后一个方法的返回值。


string spistr = "i,love.you!memeda";
string[] strArr = Regex.Split(spistr, "[,.!]");
foreach (string s in strArr) {
    Console.WriteLine(s);
}

Split()方法表示切割字符串,以,或,或!区分的


string sttr = "123addyou恩啊1a";
MatchCollection coll = Regex.Matches(sttr, @"[a-z]|\d");
foreach (Match m in coll) {
   Console.WriteLine(m.ToString());
}

Matches()方法匹配符合子字符串集合

这里匹配单个数字或者是a-z的字母


string input = Console.ReadLine();
bool isMatch = Regex.IsMatch(input, @"^\d*$");
Console.WriteLine(isMatch);

\d 表示数字

*表示0个,一个,多个

IsMatch方法,表示是否匹配


using System.Text.RegularExpressions;
string regex = "I am a boy";
string newstr = Regex.Replace(regex, "^", "开始:");
Console.WriteLine(newstr);

^匹配开头,直接替换开头为“开始:”

扩展 $ 表示匹配结尾

Replace方法,为替换方法


Append("str");//在当前字符串后面追加str
Insert(index,"str");//在index位置前面插入str
Remove(startIndex,length);//移除指定位置后面指定长度的子字符串
Replace(cs1,cs2);//替换某个字符或字符串cs1为cs2
ToString();//转换为一个不可变长的字符串string