A1 ………… 函数
A2 ………… ArrayList 类
A3 ………… Hashtable 类
A4 ………… Random 类
A5 ………… Math 类
A6 ………… DateTime 结构
A7 ………… TimeSpan 结构
A8 ………… DateAndTime 结构
A9 ………… Format 类
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A1个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 函数Main()是控制台应用程序的入口点函数~void表示函数没有返回值!下面是有返回值的:
static <returnType> <functionName>() { ... return <returnValue>; //在执行到return语句时,程序会立即返回调用代码,函数立即终止! } //return语句是一定要执行的,函数必须要有返回值!
2. 带有参数的函数:
static <returnType> <functionName>(<paramType> <paramName>, ...) { ... return <returnValue>; }
3. 全局变量和局部变量:用static关键字来定义,当全局变量和局部变量同名时,要在全局变量的前面加上类名,如果没有局部变量会被使用,而全局变量会被屏蔽掉,例如在下面Main函数中,Program.myString是全局变量,而myString是局部变量。如果不是同名,则可以直接用!
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ch06Ex01 { class Program { staticstring myString; staticvoid Write() { string myString = "String defined in Write()"; Console.WriteLine("Now in Write()"); Console.WriteLine("Local myString = {0}", myString); Console.WriteLine("Global myString = {0}", Program.myString); } staticvoid Main(string[] args) { string myString = "String defined in Main()"; Program.myString = "Global string"; Write(); Console.WriteLine("\nNow in Main()"); Console.WriteLine("Local myString = {0}", myString); Console.WriteLine("Global myString = {0}", Program.myString); Console.ReadKey(); } } //Output: //Now in Write() //Local myString = String defined in Write() //Global myString = Global string //Now in Main() //Local myString = String defined in Main() //Global myString = Global string }
4. 参数数组:
static <returnType> <functionName>(<p1Type><p1Name>, ... ,params <type>[] <name>) { ... return <returnValue>; }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ch06Ex03 { class Program { staticint SumVals(int m,paramsint[] vals) //参数数组 { int sum = 0; foreach (int val in vals) { sum += val; } return sum * m; } staticvoid Main(string[] args) { int i = 100; int sum = SumVals(i, 1, 5, 2, 9, 8); //调用函数,随意写入数组 int sum2 = SumVals(i, 2, 4, 4, 5, 6, 6, 7, 7); Console.WriteLine("Summed Values = {0}", sum); Console.WriteLine("Summed Values = {0}", sum2); int[] exer = { 1, 3, 4, 5, 6, 7 }; //直接定义数组 Console.WriteLine("summed Values = {0}", SumVals(i, exer)); Console.ReadKey(); } //Summed Values = 2500 //Summed Values = 4100 } }
5. 引用参数、值参数、输出参数
staticint ShowDouble(refint val) { val *= 2; return val; } staticvoid Main(string[] args) { int myNumber = 5; Console.WriteLine("myNumber = {0}", myNumber); Console.WriteLine("myNumber.ShowDouble = {0}", ShowDouble(ref myNumber)); Console.WriteLine("myNumber.ShowDouble = {0}", ShowDouble(ref myNumber)); Console.WriteLine("myNumber.ShowDouble = {0}", ShowDouble(ref myNumber)); Console.WriteLine("myNumber.ShowDouble = {0}", ShowDouble(ref myNumber)); Console.WriteLine("myNumber.ShowDouble = {0}", ShowDouble(ref myNumber)); Console.WriteLine("myNumber = {0}", myNumber); Console.ReadKey(); } //myNumber = 5 //myNumber.ShowDouble = 10 //myNumber.ShowDouble = 20 //myNumber.ShowDouble = 40 //myNumber.ShowDouble = 80 //myNumber.ShowDouble = 160 //myNumber = 160 //请按任意键继续. . . staticvoid ShowDouble(refint val) { val *= 2; Console.WriteLine("val doubled = {0}", val); } staticvoid Main(string[] args) { int myNumber = 5; Console.WriteLine("myNumber = {0}", myNumber); ShowDouble(ref myNumber); //在调用函数的时候不要忘记ref Console.WriteLine("myNumber = {0}", myNumber); Console.ReadKey(); } //myNumber = 5 //val doubled = 10 //myNumber = 10
staticvoid Main(string[] args) { int[] outArray; int[] refArray = { 1, 2, 3, 4, 5 }; //使用out传递数组 outArrayMethod(out outArray);//适用out关键字前不必进行初始化 Console.WriteLine("使用out传递数组:"); //使用for循环输出数组元素的值 for (int i = 0; i < outArray.Length; i++) { Console.Write(outArray[i] + ""); Console.WriteLine("outArray[{0}] = {1}", i, outArray[i]); } // 使用ref传递数组 refArrayMethod(ref refArray);//适用ref关键字前必须进行初始化 Console.WriteLine("\n使用ref传递数组:"); //使用for循环输出数组元素的值 for (int i = 0; i < refArray.Length; i++) { Console.WriteLine("refArray[{0}] = {1}", i, refArray[i]); } Console.ReadLine(); } ///<summary> /// 使用out传递数组 ///</summary> ///<param name="arr">int类型数组</param> staticvoid outArrayMethod(outint[] arr) { // 创建数组 arr = newint[5] { 1, 2, 3, 4, 5 }; } ///<summary> /// 使用ref传递数组 ///</summary> ///<param name="arr">int类型数组</param> staticvoid refArrayMethod(refint[] arr) { //如果为空则重新创建 if (arr == null) { arr = newint[8]; } arr[0] = 1234; arr[3] = 4321; } //使用out传递数组: //1 outArray[0] = 1 //2 outArray[1] = 2 //3 outArray[2] = 3 //4 outArray[3] = 4 //5 outArray[4] = 5 //使用ref传递数组: //refArray[0] = 1234 //refArray[1] = 2 //refArray[2] = 3 //refArray[3] = 4321 //refArray[4] = 5
6. 可以定义两个名称相同的函数,但是其类型要不同,不能通过不同的返回值类型来定义相同的函数,因为签名(名称+类型)是相同的。
static void ShowDouble(ref int val) { ... } static void ShowDouble(int val) { ... } static void ShowDouble(double val) { ... } //三个不同的函数,参数的类型是不同的,只不过名字是相同的
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A2个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. ArrayList类在System.Collections命名空间中!
ArrayList Li = new ArrayList(); ArrayList Li = new ArrayList(5); 通过Add方法可以加入各种类型的数据,若是超过容量,则容量会成倍自动增加!
2. ArrayList 构造函数:
3. ArrayList 方法:
4. ArrayList 属性:
staticvoid Main(string[] args) { ArrayList Li = new ArrayList(4); Console.WriteLine("Li中的元素个数为{0}", Li.Count); Console.WriteLine("Li中的容量为{0}", Li.Capacity); Console.WriteLine(); Li.Add("Alex"); Li.Add("McDelfino"); Li.Add('a'); Li.Add("Alex"); Li.Add("Alex"); Li.Add(3); Li.Add("Alex"); Li.Add("Alex"); Li.Add("Alex"); Li.Add(1); for (int i = 0; i < Li.Count;i++) { Console.WriteLine(Li[i]); } Console.WriteLine(); int[] inum = {1,3,5,7,9}; Li.AddRange(inum); for (int i = 0; i < Li.Count;i++) { Console.WriteLine(Li[i]); } Console.WriteLine(); Li.InsertRange(3, inum); for (int i = 0; i < Li.Count; i++) { Console.WriteLine(Li[i]); } Console.WriteLine(); Li.RemoveAt(3); for (int i = 0; i < Li.Count; i++) { Console.WriteLine(Li[i]); } Console.WriteLine(); Li.RemoveRange(4, 4); for (int i = 0; i < Li.Count; i++) { Console.WriteLine(Li[i]); } Console.WriteLine(); Console.ReadKey(); } //Alex //Alex //3 //Alex //Alex //Alex //1 //1 //3 //5 //7 //9 //Alex //McDelfino //a //3 //5 //7 //9 //Alex //Alex //3 //Alex //Alex //Alex //1 //1 //3 //5 //7 //9 //Alex //McDelfino //a //3 //Alex //3 //Alex //Alex //Alex //1 //1 //3 //5 //7 //9
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A3个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. Hashtable类在System.Collections命名空间中!
Hashtable ht = new ArrayList(); Hashtable ht = new ArrayList(5);
staticvoid Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001", "number"); ht.Add("002", "number"); ht.Add("003", "number"); ht.Add("004", "number"); ht.Add("005", "number"); Console.WriteLine("输出ht的键/值的对数为:{0}",ht.Count); foreach(DictionaryEntry de in ht) //关键字DictionaryEntry定义每个哈希值 { Console.Write("{0,-4}", de.Key); Console.Write("{0,-4}", de.Value); Console.WriteLine(); } Console.WriteLine(); foreach (string s in ht.Keys) { Console.Write("{0,-4}", s); Console.Write("{0,-4}", ht[s]); Console.WriteLine(); } Console.ReadKey(); } //输出ht的键/值的对数为:5 //003 number //004 number //005 number //001 number //002 number //003 number //004 number //005 number //001 number //002 number
2. Hashtable 方法:
3. Hashtable 属性:
4. Values:获取包含Hashtable中的值的ICollection。
DictionaryEntry 结构:用来遍历Hashtable中的成员。
① 用 Hashtable 建立 distinct 集合!
private void loadRegionData() { comboBox4.Items.Clear(); ILayer pLayer = axMapControl1.get_Layer(0); IFeatureLayer pFLayer = pLayer as IFeatureLayer; IFeatureClass pFClass = pFLayer.FeatureClass; IFields pFields = pFClass.Fields; int Index = pFClass.FindField("REGION"); //找到列所在的 Index! IFeatureCursor pFCursor = pFClass.Search(null, false); //用于循环 IFeature pFeature = pFCursor.NextFeature(); //用于获取每一个feature Hashtable ht = new Hashtable(); //新建Hashtable while (pFeature != null) { string name = pFeature.get_Value(Index); //获取 Index 列的值! if (!ht.ContainsKey(name)) //判断ht中是否含有name的Key,没有就添加 { ht.Add(name, name); } pFeature = pFCursor.NextFeature(); } foreach (object o in ht.Values) //遍历ht中的Values { comboBox4.Items.Add(o.ToString()); } comboBox4.Text = comboBox4.Items[0].ToString(); }
※ 如何修改HashTable中指定键的值
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A4个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。
2. Random 构造函数:
3. Random 方法:
※ Random 扩展:http://www.cnblogs.com/zhanqi/archive/2011/03/25/1996013.html
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A5个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 数学相关的类。
2. Math 方法:
3. Math 字段:
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A6个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 表示时间上的一刻,通常以日期和当天的时间表示。
2. DateTime 结构构造函数:
3. DateTime 结构属性:
4. DateTime 结构字段:
5. DateTime 结构方法(方法产生效果,但是自身没变化):
参考:http://zhidao.baidu.com/question/246229487.html
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A7个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 表示一个时间间隔。
2. TimeSpan 构造函数
TimeSpan(Int64) | 将新的 TimeSpan 初始化为指定的刻度数。 | |
TimeSpan(Int32, Int32, Int32) | 将新的 TimeSpan 初始化为指定的小时数、分钟数和秒数。 | |
TimeSpan(Int32, Int32, Int32, Int32) | 将新的 TimeSpan 初始化为指定的天数、小时数、分钟数和秒数。 | |
TimeSpan(Int32, Int32, Int32, Int32, Int32) | 将新的 TimeSpan 初始化为指定的天数、小时数、分钟数、秒数和毫秒数。 |
3. TimeSpan 结构属性
名称 |
说明 |
Days |
获取由当前 TimeSpan 结构表示的整天数。 |
Hours |
获取由当前 TimeSpan 结构表示的整小时数。 |
Milliseconds |
获取由当前 TimeSpan 结构表示的整毫秒数。 |
Minutes |
获取由当前 TimeSpan 结构表示的整分钟数。 |
Seconds |
获取由当前 TimeSpan 结构表示的整秒数。 |
Ticks |
获取表示当前 TimeSpan 结构的值的刻度数。 |
TotalDays |
获取以整天数和天的小数部分表示的当前 TimeSpan 结构的值。 |
TotalHours |
获取以整小时数和小时的小数部分表示的当前 TimeSpan 结构的值。 |
TotalMilliseconds |
获取以整毫秒数和毫秒的小数部分表示的当前 TimeSpan 结构的值。 |
TotalMinutes |
获取以整分钟数和分钟的小数部分表示的当前 TimeSpan 结构的值。 |
TotalSeconds |
获取以整秒数和秒的小数部分表示的当前 TimeSpan 结构的值。 |
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A8个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 先要:using Microsoft.VisualBasic;
在这之前 添加引用.net的Microsoft.VisualBasic 项!在“解决方案资源管理器”中的引用中操作!
2. DateAndTime 模块包含在日期和时间操作中使用的过程和属性。
3. DateAndTime 方法:
---------------------------------------------------------------------------------------------------------
╔════════╗
╠════╣ 第A9个 ╠══════════════════════════════════════════════════╣
╚════════╝
1. 将指定的 String 中的每个格式项替换为相应对象的值的文本等效项。
2. Format 举例:
string.Format("{0:C}", 8); // (C) Currency 0 表示第一个参数! ¥8.00
string.Format("{0:D3}", 8); // (D) Decimal 008 string.Format("{0:000}", 8); 008
string.Format("{0:P2}", 8); // (P) Percent 800.00%
string.Format("{1:0.00}", 8, 10); // 1 表示第二个参数 10.00
string.Format("{0:#,###.00}", 2011) 2011.00
Console.WriteLine(string.Format("{0:C3}",2)); Console.WriteLine("{0:C3}", 2); Console.WriteLine(string.Format("{0:D3}", 2)); Console.WriteLine(string.Format("{0:0.00}", 2)); Console.WriteLine("{0:00}", 2); Console.WriteLine("{0:##.##}", 2.565897); Console.WriteLine("{0:0.0%}", 0.255); Console.WriteLine("{0:#,###.00}", 2011); Console.WriteLine("{0:$.00}", 2); Console.WriteLine("{0:-0}", 2); //¥2.000 //¥2.000 //002 //2.00 //02 //2.57 //25.5% //2,011.00 //$2.00 //-2
None | 显示没有任何格式设置的数字。 |
(0) | 数字占位符。显示一个数字或 0。如果表达式在格式字符串中出现 0 的位置上有数字,则显示该数字;否则在该位置显示 0。如 果数字的位数少于格式表达式中 0 的个数(小数点任一侧),则显示前导零或尾随零。如果数字的小数点分隔符右侧的位数多于格式表达式中小数点分隔符右侧零的个数,则将数字舍入到与零的个数 相同的小数位置。如果数字的小数点分隔符左侧的位数多于格式表达式中小数点分隔符左侧零的个数,则不做任何修改地显示额外的数字。 |
(#) | 数字占位符。显示一个数字或不显示任何数字。如果表达式在格式字符串中出现 # 字符的位置上有数字,则显示该数字;否则该位置不显示任何数字。该符号与 0 数字占位符的作用相似,不同的是当数字的位数少于格式表达式中小数点分隔符任一侧 # 字符的个数时,不显示前导零和尾随零。 |
(.) | 小数点占位符。小数点占位符确定小数点分隔符两侧显示的数字个数。如果格式表达式中该符号的左侧只包含 # 字符,则小于 1 的数字将以小数点分隔符开头。若要显示与小数一起显示的前导零,请将零用作小数点分隔符左侧的第一个数字占位符。在某些区域设置中,逗号用作小数点分隔 符。格式化输出中用作小数点占位符的实际字符取决于系统所识别的数字格式。这样,即使所在的区域使用逗号作为小数点占位符,也应该使用句点作为格式中的小 数点占位符。格式化的字符串将以相应于区域设置的正确格式显示。 |
(%) | 百分比占位符。用 100 乘以表达式。在格式字符串中出现百分比占位符的位置插入百分比字符 (%)。 |
(,) | 千位分隔符。在小数点分隔符左侧有四个或更多位数的数字中,千位分隔符将千位与百位分隔开。如果格式中的千位分隔符包含在数字占位符(0 或 #)中,则指定了千位分隔符的标准用法。紧挨在小数点分隔符左侧(不论是否指定小数)或用作字符串中最右边字符的千位分隔符表示:“通过将数字除以 1,000 来换算数字,并根据需要进行舍入”。小于 1,000 但大于等于 500 的数显示为 1,小于 500 的数显示为 0。此处使用两个相邻的千位分隔符表示按一百万的因子进行换算,每增加一个分隔符,因子就乘以 1,000。如 果多个分隔符不是位于紧挨小数点分隔符左侧的位置或字符串中最右边的位置,则只将它们视作指定使用千位分隔符。在某些区域设置中,句点用作千位分隔符。格 式化输出中用作千位分隔符的实际字符取决于系统所识别的“数字格式”。这样,即使所在的区域使用句点作为千位分隔符,也应该使用逗号作为格式中的千位分隔 符。格式化的字符串将以相应于区域设置的正确格式显示。例如,请考虑以下三个格式字符串:
|
(:) | 时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由系统设置确定。 |
(/) | 日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由系统设置确定。 |
(E- E+e- e+) | 科学格式。如果格式表达式在 E-、E+、e- 或 e+ 的左侧至少包含一个数字占位符(0 或 #),则数字将以科学格式显示,并在数字与其指数之间插入 E 或 e。左侧数字占位符的个数确定指数中数字的个数。使用 E- 或 e- 在负指数旁边放置减号。使用 E+ 或e+ 在负指数旁边放置减号,在正指数旁边放置加号。还必须在该符号的右侧包含数字占位符,才能获得正确的格式设置。 |
- + $ ( ) | 原义字符。这些字符显示后的外观与在格式字符串中键入时的外观完全一样。若要显示列出的这些字符之外的某个字符,请在字符前加反斜杠 (\) 或将字符括在双引号 (" ") 中。 |
(\) | 显示格式字符串中的下一个字符。若要将具有特殊意义的字符显示为原义字符,请在其前面加反斜杠 (\)。反斜杠本身不显示。使用反斜杠的效果与将下一个字符括在双引号中相同。若要显示反斜杠,请使用两个反斜杠 (\\)。不能显示为原义字符的字符示例包括:日期格式字符和时间格式字符(a、c、d、h、m、n、p、q、s、t、w、y、/ 和 :);数字格式字符(#、0、%、E、e、逗号和句点)以及字符串格式字符(@、&、<、> 和 !)。 |
("ABC") | 显示双引号 (" ") 内的字符串。若要在代码内将字符串包含在 style 参数中,必须使用 Chr(34) 来包含文本(34 是引号 (") 的字符代码)。 |
格式 (Style) |
“5”格式化为 |
“-5”格式化为 |
“0.5”格式化为 |
Zero-length string ("") |
5 |
-5 |
0.5 |
0 |
5 |
-5 |
1 |
0.00 |
5.00 |
-5.00 |
0.50 |
#,##0 |
5 |
-5 |
1 |
$#,##0;($#,##0) |
$5 |
($5) |
$1 |
$#,##0.00;($#,##0.00) |
$5.00 |
($5.00) |
$0.50 |
0% |
500% |
-500% |
50% |
0.00% |
500.00% |
-500.00% |
50.00% |
0.00E+00 |
5.00E+00 |
-5.00E+00 |
5.00E-01 |
0.00E-00 |
5.00E00 |
-5.00E00 |
5.00E-01 |