博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# this关键字的四种用法(转)
阅读量:6094 次
发布时间:2019-06-20

本文共 7058 字,大约阅读时间需要 23 分钟。

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

namespace Demo{    public class Test    {        private string scope = "全局变量";        public string getResult()        {            string scope = "局部变量";       // this代表Test的实例对象       // 所以this.scope对应的是全局变量        // scope对应的是getResult方法内的局部变量            return this.scope + "-" + scope;        }    }    class Program    {        static void Main(string[] args)        {            try            {                Test test = new Test();                Console.WriteLine(test.getResult());            }            catch (Exception ex)            {                Console.WriteLine(ex);            }            finally            {                Console.ReadLine();            }        }    }}

用法二  用this串联构造函数

namespace Demo{    public class Test    {        public Test()        {            Console.WriteLine("无参构造函数");        }        // this()对应无参构造方法Test()     // 先执行Test(),后执行Test(string text)        public Test(string text) : this()        {            Console.WriteLine(text);            Console.WriteLine("有参构造函数");        }    }    class Program    {        static void Main(string[] args)        {            try            {                Test test = new Test("张三");            }            catch (Exception ex)            {                Console.WriteLine(ex);            }            finally            {                Console.ReadLine();            }        }    }}

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

namespace Demo{    public static class Extends    {     // string类型扩展ToJson方法        public static object ToJson(this string Json)        {            return Json == null ? null : JsonConvert.DeserializeObject(Json);        }        // object类型扩展ToJson方法        public static string ToJson(this object obj)        {            var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };            return JsonConvert.SerializeObject(obj, timeConverter);        }        public static string ToJson(this object obj, string datetimeformats)        {            var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats };            return JsonConvert.SerializeObject(obj, timeConverter);        }        public static T ToObject
(this string Json) { return Json == null ? default(T) : JsonConvert.DeserializeObject
(Json); } public static List
ToList
(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject
>(Json); } public static DataTable ToTable(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject
(Json); } public static JObject ToJObject(this string Json) { return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace(" ", "")); } } class Program { static void Main(string[] args) { try { List
users = new List
{ new User{ID="1",Code="zs",Name="张三"}, new User{ID="2",Code="ls",Name="李四"} }; // list转化json字符串 string json = users.ToJson();          // string转化List users = json.ToList
(); // string转化DataTable DataTable dt = json.ToTable(); } catch (Exception ex) { Console.WriteLine(ex); } finally { Console.ReadLine(); } } } public class User { public string ID { get; set; } public string Code { get; set; } public string Name { get; set; } }}

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

using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;namespace MyDemo.Web{    ///     /// EPList 支持为List创建索引    ///     /// 
类型
public class EPList
{ #region 成员变量 ///
/// 索引 /// private List
m_Index = new List
(); ///
/// 缓存数据 /// private Dictionary
> m_CachedData = new Dictionary
>(); ///
/// List数据源 /// private List
m_ListData = new List
(); ///
/// 通过索引值取数据 /// ///
索引字段 ///
字段值 ///
public List
this[string[] indexFields] { get { string key = string.Join(",", indexFields); if (m_CachedData.ContainsKey(key)) return m_CachedData[key]; return new List
(); } } #endregion #region 公共方法 ///
/// 创建索引 /// ///
索引字段 public void CreateIndex(string[] indexFields) { if (m_Index.Contains(indexFields)) return; m_Index.Add(indexFields); } ///
/// 添加 /// ///
记录 public void Add(T record) { m_ListData.Add(record); m_Index.ForEach(indexFields => { string key = getKey(record, indexFields); if (m_CachedData.ContainsKey(key)) { m_CachedData[key].Add(record); } else { List
list = new List
{ record }; m_CachedData.Add(key, list); } }); } #endregion #region 私有方法 ///
/// 获取值 /// ///
记录 ///
字段名 ///
private object getValue(T record, string fieldName) { Type type = typeof(T); PropertyInfo propertyInfo = type.GetProperty(fieldName); return propertyInfo.GetValue(record, null); } ///
/// 获取Key /// ///
记录 ///
索引字段 private string getKey(T record, string[] indexFields) { List
values = new List
(); foreach (var field in indexFields) { string value = Convert.ToString(getValue(record, field)); values.Add(field + ":" + value); } return string.Join(",", values); } ///
/// 获取Key /// ///
索引字段 ///
字段值 ///
private string getKey(string[] indexFields, object[] fieldValues) { if (indexFields.Length != fieldValues.Length) return string.Empty; for (int i = 0; i < indexFields.Length; i++) { fieldValues[i] = indexFields[i] + ":" + fieldValues[i]; } string key = string.Join(",", fieldValues); return key; } #endregion }}

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

private EPList
GetEPListData(){ EPList
eplist = new EPList
(); eplist.CreateIndex(new string[] { "ParentId" }); string sql = "select Id,ParentId,Code,Name from SysDepart"; SqlHelper.ExecuteReader(sql, null, (reader) => { SysDepartInfo record = new SysDepartInfo(); record.Id = Convert.ToString(reader["Id"]); record.ParentId = Convert.ToString(reader["ParentId"]); record.Code = Convert.ToString(reader["Code"]); record.Name = Convert.ToString(reader["Name"]); eplist.Add(record); }); return eplist;}

通过索引高效查询数据

/// /// 获取子节点/// /// /// private IEnumerable
CreateChildren(EPList
data, TreeInfo node){ string id = node == null ? "0" : node.id; List
childNodes = new List
(); // ParentId字段上创建了索引,所以这里就可以通过索引值直接取出下一层子节点数据,避免Linq查询引发的效率问题 var indexValues = new string[] { "ParentId:" + id }; var childData = data[indexValues]; childData.ForEach(record => { var childNode = new TreeInfo { id = record.Id, text = record.Code + " " + record.Name }; childNodes.Add(childNode); childNode.children = CreateChildren(data, childNode); }); return childNodes.OrderBy(record => record.text);}

 

转载于:https://www.cnblogs.com/yellowcool/p/7908607.html

你可能感兴趣的文章
一款很不错的html转xml工具-Html Agility Pack
查看>>
linux安装中文输入法
查看>>
怎样用Java编写一段代码引发内存泄露
查看>>
2012年终总结
查看>>
eclipse导出jar包
查看>>
windows系统下利用MySql命令行进入MySql数据库
查看>>
如何隐藏日历列表的重复和全天事件栏目-方法2
查看>>
Java NIO与IO的差别和比較
查看>>
HTTP/1.1 中 If-Modified-Since 和 If-Unmodified-Since 区别简记
查看>>
怎样炒掉你的创业合作伙伴?
查看>>
[计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)...
查看>>
UNICODE编码表
查看>>
hadoop Mahout中相似度计算方法介绍(转)
查看>>
C语言嵌入式系统编程修炼之(三)内存操作
查看>>
IE和Firefox的Javascript兼容性总结
查看>>
c++ _int64 转成string
查看>>
Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
查看>>
linux后台运行程序
查看>>
ADO,OLEDB,ODBC,DAO,RDO的区别说明
查看>>
RabbitMQ消息队列(一): Detailed Introduction 详细介绍[转]
查看>>