C#知识点备忘

Dictionary

  • Dictionary是一个泛型,他本身有集合的功能有时候可以把它看成数组。他的结构是这样的:Dictionary<[key], [value]>
Dictionary<string, string> data=new Dictionary<string, string>();

//存入数据
data.Add(key,value);

//提取数据
data[key];

//判断该key是否存在
data.ContainsKey(key)

//遍历
foreach (KeyValuePair<string, string> keyValuePair in Dictionary的对象)
{
    Console.WriteLine("key:{0}\tvalue:{1}", keyValuePair.Key, keyValuePair.Value);
}

//清空所有值
data.Clear()

HashTable哈希表

  • 哈希表(HashTable)表示键/值对的集合。在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对,任何非 null 对象都可以用作键或值。
//创建
Hashtable ht = new Hashtable();

//在哈希表中添加一个key/键值对:
HashtableObject.Add(key,value); 

//在哈希表中去除某个key/键值对:
HashtableObject.Remove(key);

//从哈希表中移除所有元素: 
HashtableObject.Clear();

//判断哈希表是否包含特定键key: 
HashtableObject.Contains(key);

释放资源

Dispose、Close

检测代码运行时间

System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch();
st.Start();
//执行的代码内容
st.Stop();
MessageBox.Show("耗时=" + st.ElapsedMilliseconds + "毫秒");

抓取HTML页面

WebClient wc = new WebClient();
//设置抓取编码
wc.Encoding = Encoding.UTF8;
//设置抓取地址
string html = wc.DownloadString("http://localhost:6778/yzm.aspx");

操作webBrowser

//给指定表单赋值
webBrowser1.Document.GetElementById("TextBox1").SetAttribute("value", "valueStr");
//执行按钮点击操作
webBrowser1.Document.GetElementById("Button1").InvokeMember("Click");

类似控制台程序的占位符

string.Format("我是{0}:","郝开开");

获取代码执行时长

//内置的计时类
Stopwatch sw = new Stopwatch();
//开始计时
sw.Start();
/*需要计时的代码*/
//停止计时
sw.Stop();
//得到执行的时间
sw.Elapsed.ToString();

默认值

//int的默认值是0,string的默认值是null
default(数据类型);

GetType()

string str="字段";
//获取变量的类型
str.GetType();

//查看当前的类
this.GetType();

//查看当前的类地址(Dll所在地)
this.GetType().Assembly.Location;

//查看这个类的父类
this.GetType().BaseType();

//查看这个类的父类地址(DLL所在地)
this.GetType().BaseType.Assembly.Location;

//获取类型
*.GetType().ToString()

正则相关

//检测邮箱格式是否正确
Regex reEmail=new Regex(@".+@.+");
if(reEmail.Ismatch("80150348@qq.com")==false)

匿名类

  • 匿名类的写法 new {key=value的形式定义你想要的属性}
  • 匿名类本质上被编译器生成了一个泛型类,在此类的构造函数中给相应的字段赋值
  • 当两个匿名类的参数名称一样,个数也一样,但是类型不一样共用一个泛型类
  • 当两个匿名类的个数不一样或者参数名称不一样必须重新生成各自的泛型类
  • 注意点,匿名类中的属性一定要赋初始值,否则报错
var d = new { Name = "小花狗", Age = 1, ToyName = "飞碟" };

匿名方法(匿名函数,匿名委托)

  • 同签名是返回类型一致,参数类型和个数一致
delegate(编写匿名方法的参数,格式和类型由程序员自己根据业务逻辑来定义){函数的方法体代码}

delegate(int p) 
{
    return p > 5; 
}

lambda

  • => :(名字)goes to
  • 如果参数只有一个,则可以省略小括号,只留下形参名称,如果参数个数大于1个,则必须保留小括号,例如写法:(pig,dog) => true
  • 当方法体只有一句代码的时候可以省略{}和最后的分号,如果有返回值的可以省略return
  • 当方法体有多句代码的时候不可以省略{},如果有返回值的也不可以省略return
//利用匿名函数进行查询
var nlist1 = list.FindAll(delegate(Pig pig) { return pig.Age > 100 && pig.Name.Contains("八"); });

//lambda表达式的推断
var nlist2 = list.FindAll((Pig pig) => { return pig.Age > 100 && pig.Name.Contains("八"); });

//进一步简化
 var nlist3 = list.FindAll(pig => pig.Age > 100 && pig.Name.Contains("八"));

//实际运用
var nlist4 = list.FindAll(pig =>
 {
           pig.Age++;
           return pig.Age > 100 && pig.Name.Contains("八");
});

//=>的作用是把=>左边声明的变量带入到=>右边的表达式或者代码段里

扩展方法

  • 此方法必须是一个静态方法
  • 此方法必须放在静态类中
  • 此方法的第一个参数必须以this开头,并且指定此方法是扩展自哪个类型上的
  • 扩展方法扩展自哪个类型,就必须是此类型的变量来点,其他类型无法使用
  • 扩展方法中的this后面的参数不属于 方法的参数
  • 如果扩展方法和实例方法具有相同的签名,则优先调用实例方法
  • 扩展自父类上的方法,可以被子类的对象直接使用
  • 扩展自接口上的扩展方法,可以被实现类的对象直接使用
  • 扩展方法的本质,最终还是被编译器编译成了 静态类.静态方法()
/// <summary>
/// 扩展方法的要素:
/// 1、此方法必须是一个静态方法
/// 2、此方法必须放在静态类中
/// 3、此方法的第一个参数必须以this开头,并且指定此方法是扩展自哪个类型上的
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string FmtDate(this DateTime dt)
{
   return dt.ToString("yyyy-MM-dd HH:MM:ss");
}

软件配置存储(app.config)

<appSettings>
    <add key="" value=""/>
 </appSettings>
//必须引入
Using System.Configuration;

//读取
System.Configuration.ConfigurationManager.AppSettings["address"].ToString();
//写入
System.Configuration.ConfigurationManager.AppSettings.Set("address","写入的值");

枚举相关

//遍历枚举
foreach (int MyKey in Enum.GetValues(typeof(枚举名)))
{
     string Vaule = Enum.GetName(typeof(枚举名), MyKey);
     int Key = MyKey;
}

线程-延时操作

//延时操作一秒
Thread.Sleep(1000);

四舍五入

//四舍五入,保留两位小数
Math.Round(0.333333,2);

强制转换

//到整数
Convert.ToInt32(值)

//强转到字符串
Convert.ToString("");

//强制转换整数
int.Parse(值);

判断是否可以转换为int类型

int.TryParse(string s,out int i)

在数组中判断是否存在某个数组值

//int类型的判断
int[] ia = {11,22,33};
int id = Array.IndexOf(ia,11); // 这里的1就是你要查找的值

//字符串类型的判断
string[] strArr = {"a","b","c","d","e"};
bool exists = ((IList)strArr).Contains("a");

字符串转日期时间

string dtString = “2009-10-12 00:12:05”;
//方式一
DateTime dt = DateTime.Parse(dtStr);
//方式二
DateTime dt2 = Convert.ToDateTime(dtStr); 

list转换数组

int[]arr = list.ToArray();

文件夹操作

//判断文件夹是否存在
if (!System.IO.Directory.Exists(path))

//新建文件夹
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);
di.Create();

检测字符串是否为null或者为""

//如果存在值则表示false,反之则为true  切记这里是判断是否为null,而不是判断是否有值
String.IsNullOrEmpty(value)

指示指定的 Unicode 字符是否属于大写字母类别

//指示指定的 Unicode 字符是否属于大写字母类别。
IsUpper(Char)

//指示指定字符串中位于指定位置处的字符是否属于大写字母类别
IsUpper(String, Int32)

编码

编码时可以指定编码的
System.Web.HttpUtility.UrlEncode(str,System.Text.Encoding.Unicode);
System.Web.HttpUtility.UrlEncode(str,System.Text.Encoding.UTF8);
System.Web.HttpUtility.UrlEncode(str,System.Text.Encoding.GetEncoding( "GB2312 "));

解码也可以指定编码的
System.Web.HttpUtility.UrlDecode(str,System.Text.Encoding.Unicode);
System.Web.HttpUtility.UrlDecode(str,System.Text.Encoding.UTF8);
System.Web.HttpUtility.UrlDecode(str,System.Text.Encoding.GetEncoding( "GB2312 "));

readonly只读

  • 只读字段,就是说在程序运转过程中,程序中能够读取这个字段的值,而不能修正它的值。在C#中能够运用readonly关键词来界说一个只读字段。
public static readonly string name="";

DbDataReader-数据库行读取

  • SqlDataReader也可以,SqlDataReader继承自DbDataReader
DbDataReader reader
//获取列的个数
reader.FieldCount

//读取指定序号的列名
reader.GetName(i)

//读取指定序号列名的值
reader.GetValue(i)
THE END
分享
二维码
< <上一篇
下一篇>>