您好,登錄后才能下訂單哦!
用法1 為原始類型擴(kuò)展方法
先說(shuō)一下,this 后面跟的類型,就是要拓展方法的類型。注意要寫(xiě)在靜態(tài)類中的靜態(tài)方法,不然有些情況下訪問(wèn)
/// <summary> /// 擴(kuò)展類 用于為原始類擴(kuò)展方法 /// </summary> public static class AM_Extends { /// <summary> /// 為string類擴(kuò)展了一個(gè)child方法,實(shí)現(xiàn)某功能 /// </summary> /// <param name="str"></param> /// <param name="new_str"></param> public static void Child( this string str,string new_str) { object obj = str; str=new_str; } } 定義擴(kuò)展方法
private void Form1_Load(object sender, EventArgs e) { string st1 = "123"; string st2 = ""; string st3 = ""; st3 = st2.Child(st1);//st3的值為“123” } 調(diào)用實(shí)例
用法2 this代表當(dāng)前類的實(shí)例對(duì)象
用法3 用this串聯(lián)構(gòu)造函數(shù)
public class Test { public Test() { Console.WriteLine("無(wú)參構(gòu)造函數(shù)"); } // this()對(duì)應(yīng)無(wú)參構(gòu)造方法Test() // 先執(zhí)行Test(),后執(zhí)行Test(string text) public Test(string text) : this() { Console.WriteLine(text); Console.WriteLine("有參構(gòu)造函數(shù)"); } }
用法4 索引器(基于索引器封裝EPList,用于優(yōu)化大數(shù)據(jù)下頻發(fā)的Linq查詢引發(fā)的程序性能問(wèn)題,通過(guò)索引從list集合中查詢數(shù)據(jù))
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; namespace MyDemo.Web { /// <summary> /// EPList 支持為L(zhǎng)ist創(chuàng)建索引 /// </summary> /// <typeparam name="T">類型</typeparam> public class EPList<T> { #region 成員變量 /// <summary> /// 索引 /// </summary> private List<string[]> m_Index = new List<string[]>(); /// <summary> /// 緩存數(shù)據(jù) /// </summary> private Dictionary<string, List<T>> m_CachedData = new Dictionary<string, List<T>>(); /// <summary> /// List數(shù)據(jù)源 /// </summary> private List<T> m_ListData = new List<T>(); /// <summary> /// 通過(guò)索引值取數(shù)據(jù) /// </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> /// 創(chuàng)建索引 /// </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 } } 創(chuàng)建EPList
給EPList創(chuàng)建索引,并添加數(shù)據(jù)
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; } 給EPList創(chuàng)建索引,并添加數(shù)據(jù)
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; }
給EPList創(chuàng)建索引,并添加數(shù)據(jù)
/// <summary> /// 獲取子節(jié)點(diǎn) /// </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字段上創(chuàng)建了索引,所以這里就可以通過(guò)索引值直接取出下一層子節(jié)點(diǎn)數(shù)據(jù),避免Linq查詢引發(fā)的效率問(wèn)題 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); } 通過(guò)索引高效查詢數(shù)據(jù)
以上就是小編整理的全部相關(guān)知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。