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

10年积累的做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有恭城免费网站建设让你可以放心的选择与我们合作。
先说一下,this 后面跟的类型,就是要拓展方法的类型。注意要写在静态类中的静态方法,不然有些情况下访问
////// 扩展类 用于为原始类扩展方法 /// public static class AM_Extends { ////// 为string类扩展了一个child方法,实现某功能 /// /// /// public static void Child( this string str,string new_str) { object obj = str; str=new_str; } } 定义扩展方法
private void Form1_Load(object sender, EventArgs e)
{
string st1 = "123";
string st2 = "";
string st3 = "";
st3 = st2.Child(st1);//st3的值为“123”
}
调用实例用法2 this代表当前类的实例对象
用法3 用this串联构造函数
public class Test
{
public Test()
{
Console.WriteLine("无参构造函数");
}
// this()对应无参构造方法Test()
// 先执行Test(),后执行Test(string text)
public Test(string text) : this()
{
Console.WriteLine(text);
Console.WriteLine("有参构造函数");
}
}用法4 索引器(基于索引器封装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 给EPList创建索引,并添加数据
private EPListGetEPListData() { 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; } 给EPList创建索引,并添加数据
private EPListGetEPListData() { 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; }
给EPList创建索引,并添加数据
////// 获取子节点 /// /// /// private IEnumerableCreateChildren(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); } 通过索引高效查询数据
以上就是小编整理的全部相关知识点内容,感谢大家的学习和对创新互联的支持。