C# this关键字的四种用法

news/2024/10/9 8:26:22

用法一  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();}}} }
复制代码
复制代码

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

特点:1、静态类 2、静态方法 3、第一个参数前加this

例如:public static List<T> ToList<T>(this string Json),就是为this对应的string类型扩展类ToList()方法,调用方式 strJson.ToList();

详细扩展

复制代码
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<T>(this string Json){return Json == null ? default(T) : JsonConvert.DeserializeObject<T>(Json);}public static List<T> ToList<T>(this string Json){return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);}public static DataTable ToTable(this string Json){return Json == null ? null : JsonConvert.DeserializeObject<DataTable>(Json);}public static JObject ToJObject(this string Json){return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace("&nbsp;", ""));}}class Program{static void Main(string[] args){try{List<User> users = new List<User>{new User{ID="1",Code="zs",Name="张三"},new User{ID="2",Code="ls",Name="李四"}};// list转化json字符串string json = users.ToJson();// string转化Listusers = json.ToList<User>();// string转化DataTableDataTable 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
{/// <summary>/// EPList 支持为List创建索引/// </summary>/// <typeparam name="T">类型</typeparam>public class EPList<T>{#region 成员变量/// <summary>/// 索引/// </summary>private List<string[]> m_Index = new List<string[]>();/// <summary>/// 缓存数据/// </summary>private Dictionary<string, List<T>> m_CachedData = new Dictionary<string, List<T>>();/// <summary>/// List数据源/// </summary>private List<T> m_ListData = new List<T>();/// <summary>/// 通过索引值取数据/// </summary>/// <param name="indexFields">索引字段</param>/// <param name="fieldValues">字段值</param>/// <returns></returns>public List<T> this[string[] indexFields]{get{string key = string.Join(",", indexFields);if (m_CachedData.ContainsKey(key)) return m_CachedData[key];return new List<T>();}}#endregion#region 公共方法/// <summary>/// 创建索引/// </summary>/// <param name="indexFields">索引字段</param>public void CreateIndex(string[] indexFields){if (m_Index.Contains(indexFields)) return;m_Index.Add(indexFields);}/// <summary>/// 添加/// </summary>/// <param name="record">记录</param>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<T> list = new List<T> { record };m_CachedData.Add(key, list);}});}#endregion#region 私有方法/// <summary>/// 获取值/// </summary>/// <param name="record">记录</param>/// <param name="fieldName">字段名</param>/// <returns></returns>private object getValue(T record, string fieldName){Type type = typeof(T);PropertyInfo propertyInfo = type.GetProperty(fieldName);return propertyInfo.GetValue(record, null);}/// <summary>/// 获取Key/// </summary>/// <param name="record">记录</param>/// <param name="indexFields">索引字段</param>private string getKey(T record, string[] indexFields){List<string> values = new List<string>();foreach (var field in indexFields){string value = Convert.ToString(getValue(record, field));values.Add(field + ":" + value);}return string.Join(",", values);}/// <summary>/// 获取Key/// </summary>/// <param name="indexFields">索引字段</param>/// <param name="fieldValues">字段值</param>/// <returns></returns>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<SysDepartInfo> GetEPListData()
{EPList<SysDepartInfo> eplist = new EPList<SysDepartInfo>();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;
}
复制代码
复制代码

通过索引高效查询数据

复制代码
/// <summary>
/// 获取子节点
/// </summary>
/// <param name="data"></param>
/// <param name="parentId"></param>
private IEnumerable<TreeInfo> CreateChildren(EPList<SysDepartInfo> data, TreeInfo node)
{string id = node == null ? "0" : node.id;List<TreeInfo> childNodes = new List<TreeInfo>();
// 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); }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/43111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

首期“软件企业 AI 开发提效实战营”成功举办

人工智能是国家战略的重要组成部分,是未来国际竞争的焦点和经济发展的新引擎。随着人工智能科技的飞速发展,软件企业如何借助 AI 工具辅助编程,提升开发效率,成为业界关注的焦点。此前,浙江省软件行业协会携手阿里云成功举办了首期“软件企业 AI 开发提效实战营”的专业培…

龙哥量化:通达信新超买超卖指标公式源码

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 新超买超卖指标公式 使用说明: 1.适用于超跌反弹行情。 2.个股大幅下跌后,连续出现黄区块表明进入超卖严重,一段时间内出现的次数越多连续时间越长,后面的行情越有期待。 3.当出现买入信号,可以试…

开源数据库生态遇新变数,天翼云TeleDB提供企业数据管理更优解!

天翼云TeleDB分析型实例是一款性能卓越、完全托管的PB级国产化云分析型数据库产品,可提供轻松的海量数据分析体验。基于元数据、计算和存储分离的架构,TeleDB分析型实例集成了MPP数据库的高性能和分析功能、大数据平台的扩展性和灵活性以及云计算的弹性和敏捷性,支持SQL及标…

五连冠!天翼云稳居中国专属云服务市场榜首!

近日,国际数据公司IDC发布的《中国专属云服务市场(2023下半年)跟踪》报告显示,2023下半年,专属云服务整体市场规模同比增长18.0%。中国电信天翼云以21.8%的市场份额,蝉联中国专属云服务市场第一。天翼云连续五次登顶,以实力持续领跑中国专属云服务市场。近日,国际数据公…

数字先锋 | SaaS服务“拎包入住”?央企数字化转型体验感拉满!

在数字化转型过程中,SaaS模式凭借其快速部署、易于管理、成本低廉等优势,成为国资央企数字化转型的首选模式之一。 基于国资央企SaaS应用服务共享平台,中国电信天翼云与中国信科共建国云邮箱SaaS应用,依托标准化、高质量的邮箱系统,提供了高效的管理和运营支撑,为行业持续…

龙哥量化:通达信简单抄底吃货副图源码

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 B:=EMA((C-LLV(L,3))/(HHV(H,3)-LLV(L,3))*C*1.2,3); 抄底吃货:COUNT(B<H*0.2,2) AND C/REF(C,1)>1.093,COLORYELLOW,LINETHICK2; STICKLINE(抄底吃货,0,0.8,2,0),COLOR0000FF;

龙哥量化:通达信波段潜伏金叉副图指标公式源码

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 T:80,POINTDOT,COLORBLUE,LINETHICK3; OO:20,POINTDOT,COLORMAGENTA,LINETHICK3; ZKK:kd.K#WEEK(9,3,3),COLORRED; ZKD:KD.D#WEEK(9,3,3),COLORYELLOW; VAR1:=FILTER(crOSS(ZKK,ZKD) AND REF(ZKD,1)&l…

龙哥量化:通达信神密底指标,抄底类源码副图

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 DRAWGBK(CLOSE>0,RGB(0,10,10),RGB(88,0,0),0,2,0); VAR1:=MA(CLOSE,55); VAR2:=expma(CLOSE,6); VAR3:=MA(CLOSE,5); VAR4:=MA(CLOSE,5)-MA(CLOSE,13)+MA(CLOSE,8); VAR5:=MA(VAR4,2); VAR6:=VAR4…