C#拾贝

C#C#技巧C#进阶

不积跬步无以至千里,不积小流无以成江河

C#拾贝

一、Linq

1、以...开头 StartsWith

  1. Repeater1.DataSource=con.Users.Where(r=>r.Nickname.StartsWith("李")); 


  2. Repeater1.DataBind(); 


2、以...结尾 EndsWith

  1. Repeater1.DataSource=con.Users.Where(r=>r.Nickname.EndsWith("同")); 


  2. Repeater1.DataBind(); 


3、模糊差(包含) Contains

  1. Repeater1.DataSource=con.Users.Where(r=>r.Nickname.Contains("蘇")); 


  2. Repeater1.DataBind(); 


4、个数 Count()或者Tolist().Count

  1. Response.Write("总个数:"+con.Users.Count()); 


  2. Response.Write("总个数:"+con.Users.Tolist().Count; 


5、最大值 Max(r=>r.列名)

  1. Response.Write("总个数:"+con.Users.Tolist().Max(r=>r.Ids); 


6、最小值 Min(r=>r.列名)

  1. Response.Write("总个数:"+con.Users.Tolist().Min(r=>r.Ids); 


7、平均值 Average(r=>r.列名)

  1. Response.Write("总个数:"+con.Users.Tolist().Average(r=>r.Ids); 


8、求和 Sum(r=>r.列名)

  1. Response.Write("总个数:"+con.Users.Tolist().Sum(r=>r.Ids); 


9、升序 OrderBy(r=>r.列名)

  1. Repeater1.DataSource=con.Users.Tolist().OrderBy(r=>r.Ids); 


10、降序 OrderByDescending(r=>r.列名)

  1. Repeater1.DataSource=con.Users.Tolist().OrderByDescending(r=>r.Ids); 


11、分页 Skip()--跳过多少条 Take()--每页取多少条

  1. Repeater1.DataSource=con.Users.Tolist().Skip(0).Take(PageCount) 表示第一页跳过0条,每页取PageCount条 


二、模拟键盘按键

通过键盘按键可以调用一些软件的快捷键,比如录屏、截图、语言

键位对照表:https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes 十六进制转十进制即可

如虚拟键值 ESC键对应十六进制为0x1B十进制为27


键盘键与虚拟键码对照表


  1. [DllImport("user32.dll", EntryPoint = "keybd_event")] 



  2. public static extern void Keybd_event( 



  3. byte bvk,//虚拟键值 ESC键对应的是27 16进制为0x1B 



  4. byte bScan,//0 



  5. int dwFlags,//0为按下,1按住,2释放 



  6. int dwExtraInfo//0 



  7. ); 





  8. void Start() 







  9. Keybd_event(27,0,0,0); 



  10. Keybd_event(27, 0, 1, 0); 



  11. Keybd_event(27, 0, 2, 0); 






三、WPF另类投屏方案

有时希望WPF中可以将某些一个页面不同窗口投到不同的屏幕上去,类似仿真操控台上多个屏幕分别输出到不同的显示器。这时候可以通过窗口抓屏的方式,一秒抓30次来模拟录屏,在将抓的图替换到需要的窗口,不同屏幕放不同窗口。

API: RenderTargetBitmap

四、WPF白板实现

API:inkcanvas

DrawingAttributes 可以设置笔触大小、颜色、平滑等

ColorDialog 作为调色盘

PreviewMouseWheel 事件滚轮控制笔触大小

五、Attribute使用

1、为枚举添加描述

  1. using System; 


  2. using System.Collections.Generic; 


  3. using System.ComponentModel; 


  4. using System.Linq; 


  5. using System.Reflection; 


  6. using System.Text; 


  7. using System.Threading.Tasks; 



  8. namespace demo 





  9. /// <summary> 


  10. /// 枚举类 


  11. /// </summary> 


  12. public enum TypeEnum 





  13. [EnumText("活跃型")] 


  14. Active = 1, 



  15. [EnumText("健康型")] 


  16. Healthy = 2, 



  17. [EnumText("稳健型")] 


  18. Steady = 3 





  19. /// <summary> 


  20. /// 自定义Attribute 


  21. /// </summary> 


  22. public class EnumText : Attribute 





  23. public EnumText(String text) 





  24. this.Text = text; 






  25. public String Text { get; set; } 





  26. /// <summary> 


  27. /// 帮助类 


  28. /// </summary> 


  29. public class EnumHelper 





  30. /// <summary> 


  31. /// 获取自定义attribute  


  32. /// </summary> 


  33. /// <typeparam name="T"></typeparam> 


  34. /// <param name="enumObj"></param> 


  35. /// <returns></returns> 


  36. public static T GetAttribute<T>(Enum enumObj)where T:Attribute 





  37. Type type = enumObj.GetType(); 


  38. Attribute attr = null; 


  39. try 





  40. String enumName = Enum.GetName(type, enumObj); //获取对应的枚举名 


  41. FieldInfo field = type.GetField(enumName);  


  42. attr = field.GetCustomAttribute(typeof(T), false); 





  43. catch (Exception ex) 





  44. Console.WriteLine(ex); 


  45. // throw ex; 






  46. return (T)attr; 






  47. /// <summary> 


  48. ///  


  49. /// </summary> 


  50. /// <param name="args"></param> 


  51. public static void Main(String[] args) 





  52. var enum1 = TypeEnum.Active; 


  53. Console.WriteLine(GetAttribute<EnumText>(enum1).Text); 



  54. Console.WriteLine("输入任意键结束"); 


  55. Console.ReadKey(); 









2、为协议号添加描述

2.1、继承同一接口的协议号类

  1. public interface IProtocol { } 



  2. /// <summary> 


  3. /// 协议号 


  4. /// </summary> 


  5. public class Protocol:IProtocol 





  6. //... ... 



  7. /// <summary> 


  8. /// 登录 


  9. /// </summary> 


  10. [IProtocolDesc("登录")]  


  11. public const int Login = 2501; 



  12. //... ...  





2.2、通过反射来得到协议对应值的描述

  1. [AttributeUsage(AttributeTargets.Field)] 


  2. public sealed class IProtocolDescAttribute : Attribute 





  3. public string Descripiton { get; } 



  4. public IProtocolDescAttribute(string des) : base() 





  5. Descripiton = des; 









  6. public static class IProtocolDesHelper 





  7. public static string GetDes(int value) 





  8. string des = value.ToString(); 


  9. BindingFlags binding = BindingFlags.Static | BindingFlags.Public;//const值为静态类型,这里作为限定 



  10. Assembly ass=Assembly.GetAssembly(typeof(IProtocol)); 


  11. Type[] types = ass.GetTypes(); 


  12. List<Type> protocalTypes=new List<Type>(); 


  13. foreach (var type in types) 





  14. if (type.IsInterface) continue; 


  15. Type[] ins = type.GetInterfaces(); 


  16. foreach (var item in ins) 





  17. if(item==typeof(IProtocol)&&!protocalTypes.Contains(type)) 


  18. protocalTypes.Add(type);//挑选出实现IProtocol类型的实例 









  19. foreach (var protocalType in protocalTypes) 





  20. var fieldInfos = protocalType.GetFields(binding); 


  21. foreach (var fieldInfo in fieldInfos) 





  22. var feildvalue = fieldInfo.GetValue(protocalType); 


  23. int rel; 


  24. if (int.TryParse(feildvalue.ToString(), out rel)) 





  25. if (rel == value) 





  26. var att = fieldInfo.GetCustomAttributes(typeof(IProtocolDescAttribute), false) as IProtocolDescAttribute[]; 


  27. if (att != null && att.Length > 0) 


  28. return att[0].Descripiton; 
















  29. return des; 








六、反射使用

1、反射与泛型

  1. using System; 


  2. using System.Collections.Generic; 


  3. using System.Reflection; 


  4. using UnityEngine; 



  5. public class TestGneric : MonoBehaviour 





  6. // Start is called before the first frame update 


  7. void Start() 





  8. GetTypeOfGeneric(); 






  9. //获取泛型和已构造的Type对象的各种方式 


  10. public void GetTypeOfGeneric() 





  11. string listTypeName = "System.Collections.Generic.List`1"; 


  12. Type defByName = Type.GetType(listTypeName); 


  13. Type closedByName = Type.GetType(listTypeName + "[System.String]"); 


  14. Type closedByMethod = defByName.MakeGenericType(typeof(string)); 


  15. Type closedByTypeof = typeof(List<string>); 



  16. Debug.Log(closedByMethod==closedByName);//True 


  17. Debug.Log(closedByTypeof==closedByName);//True 



  18. Type defByTypeof = typeof(List<>); 


  19. Type defByMethod = closedByName.GetGenericTypeDefinition(); 



  20. Debug.Log(defByMethod==defByName);//True 


  21. Debug.Log(defByTypeof==defByName);//True 






  22. public static void PrintTypeParameter<T>() 





  23. Debug.Log(typeof(T)); 






  24. public void InvokeGenericByRf() 





  25. Type type = typeof(TestGneric); 


  26. //从泛型类型定义获取的方法不能直接调用, 


  27. MethodInfo definition = type.GetMethod("PrintTypeParameter"); 


  28. //必须从一个已构造的类型获取方法 


  29. MethodInfo constructed = definition.MakeGenericMethod(typeof(string)); 


  30. constructed.Invoke(null, null); 









C#拾贝的更多相关文章

  1. iOS多线程拾贝------操作巨人编程

    iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...

  2. AngularJS进阶(三十二)书海拾贝之特殊的ng-src和ng-href

    书海拾贝之特殊的ng-src和ng-href 在说明这两个指令的特殊之前,需要先了解一下ng的启动及执行过程,如下: 1) 浏览器加载静态HTML文件并解析为DOM: 2) 浏览器加载angular. ...

  3. python: 爬取[博海拾贝]图片脚本

    练手代码,聊作备忘: # encoding: utf-8 # from __future__ import unicode_literals import urllib import urllib2 ...

  4. python 拾贝

    1. 内建的 type() 函数带三个参数时, 将作为强悍的动态类构造器. 如下:   type(name, bases, dict) 返回一个新的type对象. 基本上是 class 语句的动态形式 ...

  5. 技海拾贝 - Android

    1. 前台Service - 介绍: http://blog.csdn.net/think_soft/article/details/7299438 - 代码实例:  http://blog.csdn ...

  6. 技海拾贝 - Java

    1. Java中的多线程 http://blog.csdn.net/luoweifu/article/details/46673975 Java中继承thread类与实现Runnable接口的区别 h ...

  7. DDD:《实现领域驱动》拾贝(待续)

    Design is not just what it looks like and feels like. Design is how it works.

  8. AngularJS进阶(三十三)书海拾贝之简介AngularJS中使用factory和service的方法

    简介AngularJS中使用factory和service的方法 AngularJS支持使用服务的体系结构"关注点分离"的概念.服务是JavaScript函数,并负责只做一个特定的 ...

  9. .Net Discovery 系列之七--深入理解.Net垃圾收集机制(拾贝篇)

    关于.Net垃圾收集器(Garbage Collection),Aicken已经在“.Net Discovery 系列”文章中有2篇的涉及,这一篇文章是对上2篇文章的补充,关于“.Net Discov ...

  10. [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在

    前言 检索一个字符串是否存在于一个数组中, 最主要的想法应该就是对数组进行循环, 逐个推断数组的每一个元素值和给定的值是否相等. (在Java语言还能够把数组转成 List , 在 list 中直接有 ...

随机推荐

  1. 顺丰科技 Hudi on Flink 实时数仓实践

    ​简介: 介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi 来优化整个 job 状态的实践细节,以及未来的一些规划. 本文作者为刘杰,介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi ...

  2. [GPT] jquery chosen插件选择的多个元素是逗号分隔的,怎么设置成其它分隔符号 ?

    如果你想要在 jQuery Chosen 插件中使用其它分隔符号,可以通过以下方式实现: 1. 设置 delimiter 选项为一个包含所需分隔符的字符串. $(".chosen-selec ...

  3. CSS:鼠标移动到图片上的动画

    CSS:鼠标移动到图片上的动画 .pic img { width: 100%; left: 0; top: 0; right: 0; bottom: 0; margin: auto; transiti ...

  4. 【Python基础】两个参数的for循环步长写法

    一个参数for循环步长写法 >>> for i in range(1,10000,1000):print(i) ... 1 1001 2001 3001 4001 5001 6001 ...

  5. 03 elasticsearch学习笔记-IK分词器?

    目录 1. 什么是IK分词器 2. 下载IK分词器 3. 使用kibana测试! 4. 创建自定义词典 5. Analysis 1. 什么是IK分词器 2. 下载IK分词器 下载地址,版本要和ES的版 ...

  6. Ubuntu虚拟机ROS的安装与使用

    ROS安装 直达链接 安装ROS2 使用鱼香ROS的一键安装: wget http://fishros.com/install -O fishros && bash fishros 进 ...

  7. python教程6.1-模块和包

    模块分类 1.内置标准模块(⼜称标准库)执⾏help('modules')查看所有python⾃带模块列表 2.第三⽅开源模块,可通过pip install 模块名 联⽹安装 3.⾃定义模块 模块导入 ...

  8. 日常Bug排查-连接突然全部关闭

    日常Bug排查-连接突然全部关闭 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 最近碰到一个问题,一台机器上的连接数在达到 ...

  9. .NET6 Minimal API 集成Autofac

    前提 集成Autofac前需要先添加两个依赖包 可以通过 NuGet 进行安装,使用以下命令: dotnet add package Autofac dotnet add package Autofa ...

  10. Expander展开收缩动画

    这个问题困扰了我一天,最后下了个MaterialDesign的demo,看了下他的源码,才恍然大悟,原来很简单. 我原来的设想是在expander的ControlTemplate设置触发器,在IsEx ...