工具-选项-文本编辑器-所有语言-显示 行号。
视图-全屏显示。(快捷键Shift+Alt+Enter)
添加现有项,会自动复制文件到当前项目文件夹下。
字段处-右键-重构-封装字段(Ctrl+R Ctrl+E)
符号 | 作用 |
---|---|
// | 单行注释 |
/* */ | 多行注释 |
/// | 1.在成员变量或函数上一行(要求空行),输入///,会自动补全函数说明。2.生成自动文档(项目属性-生成-输出XML文档),项目描述直观。 |
左操作数的类型可以是int、uint、long、ulong、byte、sbyte、short、ushort。不能是double、float等。
byte、sbyte、short、ushort类型的值在位移操作后会转换成int类型。
移位值取自右操作数的低位(int-5、 long-6),移位操作从不导致溢出。
byte temp=255;
try
{
checked { temp += 10; }
}
catch ( Exception ex){}
typeof关键字用于获取类型的System.Type对象。
System.Type t = typeof(System.String);
foreach (MethodInfo method in t.GetMethods())
{
foreach (ParameterInfo para in method.GetParameters())
{
//...
}
}
1.using关键字用来引用命名空间。
2.回收对象资源。
包括文件资源、网络资源、数据库资源等。要求小括号内产生的对象必须实现IDisposable接口。在using关键字下面的代码块执行完毕后,会自动将using小括号中创建的对下隐式转换为IDisposable接口类型,并调用接口方法Dispose释放对象资源。
两者都不会抛出异常。
is关键字用于检查对象是否与指定类型兼容。as关键字会直接进行类型转换,如果转换失败,返回NULL。
string temp1 = null;
object a = "something...";
if (a is string)
{
temp1 = (string)a;
}
string temp2 = a as string;
if (temp2 != null)
{
//....
}
switch表达式的值只可以是整型、字符串、枚举和布尔类型。
多个case可以使用一个break关键字,但只有最后一个case标签中可以带有语句块,前面的case标签中不可以带有语句块。
goto语句可以跳转到定义标签的位置。包括switch语句中的case标签、default标签和语句声明的标签,也可以使用goto语句跳出多层嵌套循环。
标签的作用域为声明它的整个语句块,包括其中的嵌套块。
goto语句的3种格式:
goto 【标签】;
goto case【参数表达式】;
goto default;
int i = 0;
switch (i)
{
case 0:
i = 2;
goto case 1;
case 1:
i = i + 1;
goto default;
default:
i = i + 1;
break;
}
递归是方法在运行中直接或间接调用自身而产生的重入现象。
static int Get(int i)
{
if (i <= 0)
{
return 0;
}
if (i <= 2)
{
return 1;
}
return Get(i - 1) + Get(i - 2);
}
char[] chr = "123456".ToCharArray();
Array.Reverse(chr, 0, chr.Length);
string reversed_str = new StringBuilder().Append(chr).ToString();//reversed_str为"654321"
加密:
字符串加密的过程是首先创建内存流对象,将内存流作为参数创建加密流对象,通过Write()方法向加密流写入数据以实现加密目的,最后从内存流中取出加密后的数据。
byte[] data=Encoding.Unicode.GetBytes("data");
byte[] key=Encoding.Unicode.GetBytes("1234");//注意:des加密秘钥长度64bit
byte[] keyIV=Encoding.Unicode.GetBytes("12345");
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, //内存流
new DESCryptoServiceProvider().CreateEncryptor(key, keyIV), //加密器对象
CryptoStreamMode.Write); //对加密流写访问
cs.Write(data, 0, data.Length);//向加密流中写入数据
cs.FlushFinalBlock();//数据压入基础流
byte[] encrypted_data_byte = ms.ToArray();//加密信息的字节数组
string encrypted_data = Convert.ToBase64String(encrypted_data_byte);//加密字符串
解密:
字符串解密的过程是将加密信息写入内存流,根据内存流作为参数创建加密流对象,最后通过加密流读取解密数据。
string encrypted_data = "WISEgAXPdAab4Rt9lBVceg=="; //将加密后的字符串转换为字节序列
byte[] key1 = Encoding.Unicode.GetBytes("1234");//注意:des加密秘钥长度64bit
byte[] keyIV1 = Encoding.Unicode.GetBytes("12345");
byte[] en_data_byte = Convert.FromBase64String(encrypted_data);
MemoryStream ms1 = new MemoryStream(en_data_byte);
CryptoStream cs1 = new CryptoStream(ms1,//内存流对象
new DESCryptoServiceProvider().CreateDecryptor(key1, keyIV1),//解密器对象
CryptoStreamMode.Read);//对加密流访问
byte[] temp_buffer = new byte[1024];
MemoryStream ms_data=new MemoryStream();//创建数据内存流对象
int readcount=0;//读取字节数
while ((readcount= cs1.Read(temp_buffer, 0, temp_buffer.Length)) > 0)//得到解密数据
{
ms_data.Write(temp_buffer, 0, readcount);
}
string data1 = Encoding.Unicode.GetString(ms_data.ToArray());//解密后的字符串
System.Globalization.NumberFormatInfo gn =
new System.Globalization.CultureInfo("zh-CN", false).NumberFormat;
gn.CurrencyDecimalDigits = 3;
gn.CurrencyGroupSeparator = ",";//设置在货币值中对小数点左边数字进行分组的字符串。
string money = 1222.2245.ToString("C", gn);//money为 "¥1,222.225"
int num = Convert.ToInt32("1f", 16);//num=31
string strnum = Convert.ToString(num, 16);//strnum为"1f"
Thread th = new Thread(() => {//lambda
while (true)
{
this.Invoke( new MethodInvoker(delegate{
this.Refresh();//重绘。屏蔽这句的话,文字发生重叠
Graphics g =this.CreateGraphics();
g.DrawString("time:"+DateTime.Now.ToString(),new Font(new FontFamily("宋体"),15),Brushes.Blue,new Point(10,10));
g.Dispose();
}));
Thread.Sleep(1000);
}
});
调用GetLocalTime和SetLocalTime需要引用非托管程序集,所以需要引用System.Runtime.InteropServices。
public class SetSystemDateTime//设置系统日期类
{
[DllImportAttribute("Kernel32.dll")]
public static extern void GetLocalTime(SystemTime st);
[DllImportAttribute("Kernel32.dll")]
public static extern void SetLocalTime(SystemTime st);
}
[StructLayoutAttribute(LayoutKind.Sequential)]
public class SystemTime//系统时间类
{
public ushort vYear;//年
public ushort vMonth;//月
public ushort vDayOfWeek;//星期
public ushort vDay;//日
public ushort vHour;//小时
public ushort vMinute;//分
public ushort vSecond;//秒
}
调用VB程序集中DataAndTime类的DataDiff静态方法来计算两个日期的差,得到人员年龄。需要添加Microsoft.VisualBasic程序集引用。
C#中的TimerSpan对象只有Days、Hours、Minutes、Seconds、MilliSeconds。
long P_BirthDay = DateAndTime.DateDiff(DateInterval.Year,//计算年龄
new DateTime(1995,7,1),DateTime.Now,
FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1);
十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。
十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。
十天干和十二地支进行循环组合:甲子、乙丑、丙寅…一直到癸亥,共得到60个组合,称为六十甲子,如此周而复始,无穷无尽。
System.Globalization.ChineseLunisolarCalendar chinseCaleander =//创建日历对象
new System.Globalization.ChineseLunisolarCalendar();
string TreeYear = "鼠牛虎兔龙蛇马羊猴鸡狗猪";//地支对应生肖
int intYear = chinseCaleander.GetSexagenaryYear(DateTime.Now);//计算甲子循环中的年
string Tree = TreeYear.Substring(chinseCaleander.GetTerrestrialBranch(intYear) - 1, 1);//计算地支,对应生肖
string today = DateTime.Now.ToString("dddd");//汉字,如"星期四"
DayOfWeek today_index = DateTime.Now.DayOfWeek;//DayOfWeek是枚举类型,英文,如Thursday
int days= DateTime.DaysInMonth(2020, 7);
bool leapYear = DateTime.IsLeapYear(2020);
DateTime dtnow = DateTime.Now;//2020/7/9 15:56:48
TimeSpan P_timespan_temp = dtnow - new DateTime(1995, 7, 1);
//间隔时间:9140天15时56分48秒
string msg = string.Format("间隔时间:{0}天{1}时{2}分{3}秒",
P_timespan_temp.Days, P_timespan_temp.Hours,
P_timespan_temp.Minutes, P_timespan_temp.Seconds);
DateTime dt = DateTime.ParseExact("2020/07/09 11:11:11", "yyyy/MM/dd HH:mm:ss", null);
DateTime dt2 = Convert.ToDateTime("2020-07-09 11:11:11");