//SkipWhile:找与第一个连续相同值的后面数据
int[] list = { 5, 5, 6, 5, 8, 43 };
var r = list.SkipWhile(i => i == 5).ToList();// result: 6, 6, 6, 42
//TakeWhile:获取符合当前条件数值之前的value
int[] list1 = { 1, 10, 40, 50, 44, 70, 4 };
var r1 = list1.TakeWhile(item => item < 50).ToList();// result = { 1, 10, 40 }
//zip:根据位置将两个系列中的每个元素依次配对在一起
int[] numbers = { 5, 3, 7 }; string[] words = { "five", "three", "seven", "ignored" };
IEnumerable<string> zip = numbers.Zip(words, (n, w) => n + "=" + w);
//ToLookup 扩展方法返回的是可索引查找的数据结构,它是一个 ILookup 实例,所有元素根据指定的键进行分组并可以按键进行索引
string[] array = { "one", "two", "three" };
var lookup = array.ToLookup(item => item.Length); // 根据元素字符串长度创建一个查找对象
var r2 = lookup[3];// // 查找字符串长度为 3 的元素 r2: one,two
//ToDictionary 字典转换
bool isRepeat = users.GroupBy(i => i.ID).Any(g => g.Count() > 1);//判断ID是否重复
if (isRepeat)
{
users = users.Where((x, i) => users.FindIndex(n => n.ID == x.ID) == i).ToList();
}
Dictionary<int, UserInfo> usersById = users.ToDictionary(x => x.ID);
//Concat 用来拼接两个集合,不会去除重复元素,示例:
var r3 = Enumerable.Concat(users, userinfos).ToList();// 通过 Enumerable 类的静态方法
var r4 = users.Concat(userinfos).ToList(); // 通过扩展方法
//Union 也是用来拼接两个集合,与 Concat 不同的是,它会去除重复项
var r5 = users.Select(t => t.ID).ToList().Union(userinfos.Select(t => t.ID)).ToList(); //1,2,3,4,5
//DefaultIfEmpty 空替换
var chars = new List<string>() { "a", "b", "c", "d" };
var r6 = chars.Where(s => s.Length > 1).DefaultIfEmpty("N/A").First(); // 返回"N/A"
//SequenceEqual集合相等, SequenceEqual扩展方法用于比较集合系列各个相同位置的元素是否相等。
int[] a1 = new int[] { 1, 2, 3 }; int[] b1 = new int[] { 1, 2, 3 };
bool r7 = a1.SequenceEqual(b1); //false
//EndsWith::判断字段由什么结束的。
string a3 = "can you \r\n speak chinese";
var r8 = a3.EndsWith("n");
//分割
var r9 = a3.Split("\r\n");
//Hashtable:一种松散类型的数据结构,因此您可以向Hashtable添加任何类型的键和值是弱类型。
Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, 2);
ht.Add(3, "Three");
//Dictionary:dictionary是hashtable的类型安全实现,Keys和Values是强类型。
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1, "One");
dic.Add(2, "Two");
dic.Add(3, "Three");
//Lambda Return Type
var lambdaReturn1 = int? () => null;
var lambdaReturn2 = int? (string str) => string.IsNullOrEmpty(str) ? 100 : null;
var choose = object (bool bl) => bl ? 100 : "一百";
var aaaa = choose.ToString();