Go to below URL to find more details and example.

http://blog.csdn.net/longlong821/article/details/7097666

用法一  this代表当前类的实例对象

  1. namespace Demo
  2. {
  3. public class Test
  4. {
  5. private string scope = "全局变量";
  6. public string getResult()
  7. {
  8. string scope = "局部变量";
  9.        // this代表Test的实例对象
  10.        // 所以this.scope对应的是全局变量
  11.        // scope对应的是getResult方法内的局部变量
  12. return this.scope + "-" + scope;
  13. }
  14. }
  15.  
  16. class Program
  17. {
  18. static void Main(string[] args)
  19. {
  20. try
  21. {
  22. Test test = new Test();
  23. Console.WriteLine(test.getResult());
  24. }
  25. catch (Exception ex)
  26. {
  27. Console.WriteLine(ex);
  28. }
  29. finally
  30. {
  31. Console.ReadLine();
  32. }
  33.  
  34. }
  35. }
  36. }

用法二  用this串联构造函数

  1. namespace Demo
  2. {
  3. public class Test
  4. {
  5. public Test()
  6. {
  7. Console.WriteLine("无参构造函数");
  8. }
  9. // this()对应无参构造方法Test()
  10.      // 先执行Test(),后执行Test(string text)
  11. public Test(string text) : this()
  12. {
  13. Console.WriteLine(text);
  14. Console.WriteLine("有参构造函数");
  15. }
  16. }
  17.  
  18. class Program
  19. {
  20. static void Main(string[] args)
  21. {
  22. try
  23. {
  24. Test test = new Test("张三");
  25. }
  26. catch (Exception ex)
  27. {
  28. Console.WriteLine(ex);
  29. }
  30. finally
  31. {
  32. Console.ReadLine();
  33. }
  34. }
  35. }
  36. }

用法三  为原始类型扩展方法

  1. namespace Demo
  2. {
  3. public static class Extends
  4. {
  5.      // string类型扩展ToJson方法
  6. public static object ToJson(this string Json)
  7. {
  8. return Json == null ? null : JsonConvert.DeserializeObject(Json);
  9. }
  10. // object类型扩展ToJson方法
  11. public static string ToJson(this object obj)
  12. {
  13. var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
  14. return JsonConvert.SerializeObject(obj, timeConverter);
  15. }
  16. public static string ToJson(this object obj, string datetimeformats)
  17. {
  18. var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats };
  19. return JsonConvert.SerializeObject(obj, timeConverter);
  20. }
  21. public static T ToObject<T>(this string Json)
  22. {
  23. return Json == null ? default(T) : JsonConvert.DeserializeObject<T>(Json);
  24. }
  25. public static List<T> ToList<T>(this string Json)
  26. {
  27. return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);
  28. }
  29. public static DataTable ToTable(this string Json)
  30. {
  31. return Json == null ? null : JsonConvert.DeserializeObject<DataTable>(Json);
  32. }
  33. public static JObject ToJObject(this string Json)
  34. {
  35. return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace("&nbsp;", ""));
  36. }
  37. }
  38.  
  39. class Program
  40. {
  41. static void Main(string[] args)
  42. {
  43. try
  44. {
  45. List<User> users = new List<User>{
  46. new User{ID="1",Code="zs",Name="张三"},
  47. new User{ID="2",Code="ls",Name="李四"}
  48. };
  49.  
  50. // list转化json字符串
  51. string json = users.ToJson();
  52.           // string转化List
  53. users = json.ToList<User>();
  54.  
  55. // string转化DataTable
  56. DataTable dt = json.ToTable();
  57. }
  58. catch (Exception ex)
  59. {
  60. Console.WriteLine(ex);
  61. }
  62. finally
  63. {
  64. Console.ReadLine();
  65. }
  66. }
  67. }
  68.  
  69. public class User
  70. {
  71. public string ID { get; set; }
  72. public string Code { get; set; }
  73. public string Name { get; set; }
  74. }
  75. }

用法四  索引器(基于索引器封装EPList,用于优化大数据下频发的Linq查询引发的程序性能问题,通过索引从list集合中查询数据)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6.  
  7. namespace MyDemo.Web
  8. {
  9. /// <summary>
  10. /// EPList 支持为List创建索引
  11. /// </summary>
  12. /// <typeparam name="T">类型</typeparam>
  13. public class EPList<T>
  14. {
  15. #region 成员变量
  16.  
  17. /// <summary>
  18. /// 索引
  19. /// </summary>
  20. private List<string[]> m_Index = new List<string[]>();
  21.  
  22. /// <summary>
  23. /// 缓存数据
  24. /// </summary>
  25. private Dictionary<string, List<T>> m_CachedData = new Dictionary<string, List<T>>();
  26.  
  27. /// <summary>
  28. /// List数据源
  29. /// </summary>
  30. private List<T> m_ListData = new List<T>();
  31.  
  32. /// <summary>
  33. /// 通过索引值取数据
  34. /// </summary>
  35. /// <param name="indexFields">索引字段</param>
  36. /// <param name="fieldValues">字段值</param>
  37. /// <returns></returns>
  38. public List<T> this[string[] indexFields]
  39. {
  40. get
  41. {
  42. string key = string.Join(",", indexFields);
  43. if (m_CachedData.ContainsKey(key)) return m_CachedData[key];
  44. return new List<T>();
  45. }
  46. }
  47.  
  48. #endregion
  49.  
  50. #region 公共方法
  51.  
  52. /// <summary>
  53. /// 创建索引
  54. /// </summary>
  55. /// <param name="indexFields">索引字段</param>
  56. public void CreateIndex(string[] indexFields)
  57. {
  58. if (m_Index.Contains(indexFields)) return;
  59. m_Index.Add(indexFields);
  60. }
  61.  
  62. /// <summary>
  63. /// 添加
  64. /// </summary>
  65. /// <param name="record">记录</param>
  66. public void Add(T record)
  67. {
  68. m_ListData.Add(record);
  69. m_Index.ForEach(indexFields =>
  70. {
  71. string key = getKey(record, indexFields);
  72. if (m_CachedData.ContainsKey(key))
  73. {
  74. m_CachedData[key].Add(record);
  75. }
  76. else
  77. {
  78. List<T> list = new List<T> { record };
  79. m_CachedData.Add(key, list);
  80. }
  81. });
  82. }
  83.  
  84. #endregion
  85.  
  86. #region 私有方法
  87.  
  88. /// <summary>
  89. /// 获取值
  90. /// </summary>
  91. /// <param name="record">记录</param>
  92. /// <param name="fieldName">字段名</param>
  93. /// <returns></returns>
  94. private object getValue(T record, string fieldName)
  95. {
  96. Type type = typeof(T);
  97. PropertyInfo propertyInfo = type.GetProperty(fieldName);
  98. return propertyInfo.GetValue(record, null);
  99. }
  100.  
  101. /// <summary>
  102. /// 获取Key
  103. /// </summary>
  104. /// <param name="record">记录</param>
  105. /// <param name="indexFields">索引字段</param>
  106. private string getKey(T record, string[] indexFields)
  107. {
  108. List<string> values = new List<string>();
  109. foreach (var field in indexFields)
  110. {
  111. string value = Convert.ToString(getValue(record, field));
  112. values.Add(field + ":" + value);
  113. }
  114. return string.Join(",", values);
  115. }
  116.  
  117. /// <summary>
  118. /// 获取Key
  119. /// </summary>
  120. /// <param name="indexFields">索引字段</param>
  121. /// <param name="fieldValues">字段值</param>
  122. /// <returns></returns>
  123. private string getKey(string[] indexFields, object[] fieldValues)
  124. {
  125. if (indexFields.Length != fieldValues.Length) return string.Empty;
  126. for (int i = 0; i < indexFields.Length; i++)
  127. {
  128. fieldValues[i] = indexFields[i] + ":" + fieldValues[i];
  129. }
  130. string key = string.Join(",", fieldValues);
  131. return key;
  132. }
  133.  
  134. #endregion
  135. }
  136. }

给EPList创建索引,并添加数据

  1. private EPList<SysDepartInfo> GetEPListData()
  2. {
  3. EPList<SysDepartInfo> eplist = new EPList<SysDepartInfo>();
  4. eplist.CreateIndex(new string[] { "ParentId" });
  5. string sql = "select Id,ParentId,Code,Name from SysDepart";
  6. SqlHelper.ExecuteReader(sql, null, (reader) =>
  7. {
  8. SysDepartInfo record = new SysDepartInfo();
  9. record.Id = Convert.ToString(reader["Id"]);
  10. record.ParentId = Convert.ToString(reader["ParentId"]);
  11. record.Code = Convert.ToString(reader["Code"]);
  12. record.Name = Convert.ToString(reader["Name"]);
  13. eplist.Add(record);
  14. });
  15. return eplist;
  16. }

通过索引高效查询数据

  1. /// <summary>
  2. /// 获取子节点
  3. /// </summary>
  4. /// <param name="data"></param>
  5. /// <param name="parentId"></param>
  6. private IEnumerable<TreeInfo> CreateChildren(EPList<SysDepartInfo> data, TreeInfo node)
  7. {
  8. string id = node == null ? "0" : node.id;
  9. List<TreeInfo> childNodes = new List<TreeInfo>();
  10. // ParentId字段上创建了索引,所以这里就可以通过索引值直接取出下一层子节点数据,避免Linq查询引发的效率问题
  11. var indexValues = new string[] { "ParentId:" + id };
  12. var childData = data[indexValues];
  13. childData.ForEach(record =>
  14. {
  15. var childNode = new TreeInfo
  16. {
  17. id = record.Id,
  18. text = record.Code + " " + record.Name
  19. };
  20. childNodes.Add(childNode);
  21. childNode.children = CreateChildren(data, childNode);
  22. });
  23. return childNodes.OrderBy(record => record.text);
  24. }

C# this关键字的四种用法的更多相关文章

  1. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  2. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  3. C# this关键字的四种用法(转)

    用法一  this代表当前类的实例对象 namespace Demo { public class Test { private string scope = "全局变量"; pu ...

  4. 浅谈static关键字的四种用法

    1.修饰成员变量 在一个person类中,一个成员变量例如 String name,当new2个person()对象时候,这2个对象在堆的位置是不同的,给name赋值张三.李四,这两个对象的name是 ...

  5. C#中 this关键字 四种用法

    /// <summary> /// 主程序入口 /// </summary> /// <param name="args"></param ...

  6. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  7. [java]final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  8. final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  9. javascript中this的四种用法

    javascript中this的四种用法 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-05-11我要评论 在javascript当中每一个function都是一个对象,所 ...

随机推荐

  1. hadoop distcp 命令使用指导

    1.概述 DistCp(distributed copy)是一款被用于大型集群间/集群内的复制工具. 它使用MapReduce来实现其分布,错误处理和恢复以及报告.它将文件列表和目录扩展为map任务的 ...

  2. Singleton多种实现方式的在多线程情况下的优缺点

    一.饿汉式 缺点:不能懒加载 // 不能懒加载 public class SingletonObject1 { private static final SingletonObject1 instan ...

  3. ie6下固定位置的实现

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. webp图片技术调研最终结论(完全真实数据可自行分析)

    关于webp图片格式调研及测试 资料收集 什么是 WebP? WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩 ...

  5. SpringMVC 监听文件上传进度

    Spring MVC 监听文件上传进度 具体实现分三个步骤: 接管CommonsMultipartResolver,重写针对文件上传的请求. 在第一步中写入监听,以获取上传进度. 修改上传部分的配置文 ...

  6. Nginx下配置SSL模块,支持https

    Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效 ...

  7. Day062--django--模板,母版和继承

    1.MVC和MTV MVC C Controller : 逻辑的控制 M Model : 存取数据 V View : 信息的展示 MTV M : model ORM操作 T: Template 模板 ...

  8. Vue-router(基础)_滚动行为和history模式

    一.前言 1.滚动事件 2.h5 history模式 二.主要内容 1.   (1)使用前度路由,当切换到新路由时,想要页面滚动到顶部,或者是保持原先滚动的位置,就像重新加载页面那样.vue-rout ...

  9. 虚拟机中使用centos7搭建ftp服务器

    应用场景 本地windows作为客户端,虚拟机CentOS7作为服务器端,搭建FTP服务器,本地访问虚拟机实现文件的上传下载.如何在虚拟机安装centos7就不在赘述. 1.在centos7上安装vs ...

  10. easyUI文本框获得焦点,失去焦点

    easyUI帮助文档对于文本框的操作没有提供直接获得焦点,或者失去焦点的方法,我们可以采用以下写法来实现. 获得焦点: $('input',$('#文本框Id').next('span')).focu ...