【003】◀▶ C#学习(二) - 函数与相关类

《C#入门经典(中文第四版)》第6章学习笔记

---------------------------------------------------------------------------------------------------------

●·● 目录:

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是局部变量。如果不是同名,则可以直接用!

  • View Code - 全局变量&局部变量
    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
    }
  • 若变量在循环内部初始化,则在外部无法调用这个变量,因为在循环结束时,值会丢失,在for循环中定义的变量,在for外面不可以调用,所以在定义变量的时候要初始化。
  • View Code - 错误
    staticvoid Main(string[] args)
    {
    string text;
    for ( int i = 1; i < 10;i++)
    {
    text = "Line " + Convert.ToString(i);
    Console.WriteLine("{0}",text);
    }
    Console.WriteLine("{0}",text);
    //错误:使用了未赋值的局部变量“text”
    //text在for循环中赋值了,但是退出for后值机会消失
    Console.ReadKey();
    }

4. 参数数组:

static <returnType> <functionName>(<p1Type><p1Name>, ... ,params <type>[] <name>)
{
...
return <returnValue>;
}
  • View Code - 参数数组举例
    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. 引用参数、值参数、输出参数

  • 值参数(val):把一个值传递给函数使用,对函数中此变量的任何修改都不影响函数调用中指定的参数。
  • 引用参数(ref):对这个变量进行的任何改变都会影响用作参数的变量值,使用ref关键字指定参数。
  • View Code - 引用参数2例
    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
    • 输出参数(out):执行方式与引用参数完全一样,区别:把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数,因为out参数在定义函数的时候必须要先初始化。 
  • View Code - ref与out区别
    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个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● ArrayList 类

1. ArrayList类在System.Collections命名空间中!

ArrayList Li = new ArrayList();
ArrayList Li = new ArrayList(5);
通过Add方法可以加入各种类型的数据,若是超过容量,则容量会成倍自动增加!

2. ArrayList 构造函数:

  • ArrayList():初始化 ArrayList 类的新实例,该实例为空并且具有默认初始容量。
  • ArrayList(ICollecion):初始化 ArrayList 类的新实例,该实例包含从指定集合复制的元素并且具有与所复制的元素数相同的初始容量。
  • ArrayList(Int32):初始化 ArrayList 类的新实例,该实例为空并且具有指定的初始容量。
  • 上面ICollection可以是ArrayList,也可以是Array,即普通数组,如下示例:
  • View Code - ArrayList构造函数举例
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;

    namespace ConsoleApplication5
    {
    class Program
    {
    staticvoid Main(string[] args)
    {
    Animal[] animalArray = new Animal[2];
    animalArray[0] = new Cow("Hellen");
    animalArray[1] = new Chicken("Hen");

    ArrayList animalArrayList = new ArrayList();
    animalArrayList.Add(new Cow("Hellen2"));
    animalArrayList.Add(new Chicken("Hen2"));

    animalArrayList.AddRange(animalArray);

    ArrayList animalArrayList2 = new ArrayList(animalArrayList);

    Console.WriteLine(animalArrayList2.Count);

    foreach (Animal myAnimal in animalArrayList2)
    {
    Console.WriteLine(myAnimal.Name);
    }

    ArrayList animalArray2 = new ArrayList(animalArray);
    foreach (Animal myAnimal in animalArray2)
    {
    Console.WriteLine(myAnimal.Name);
    }

    }
    }

    publicabstractclass Animal
    {
    protectedstring name;

    publicstring Name
    {
    get
    {
    returnthis.name;
    }
    set
    {
    this.name = value;
    }
    }

    public Animal()
    {
    name = "The animal with no name";
    }

    public Animal(string newName)
    {
    name = newName;
    }

    publicvoid Feed()
    {
    Console.WriteLine("{0} has been fed.", name);
    }
    }

    publicclass Cow : Animal
    {
    publicvoid Milk()
    {
    Console.WriteLine("{0} has been milked.", name);
    }

    public Cow(string newName)
    : base(newName)
    {

    }
    }

    publicclass Chicken : Animal
    {
    publicvoid LayEgg()
    {
    Console.WriteLine("{0} has laid an egg.", name);
    }

    public Chicken(string newName)
    : base(newName)
    {

    }
    }

    //4
    //Hellen2
    //Hen2
    //Hellen
    //Hen
    //Hellen
    //Hen
    //请按任意键继续. . .
    }

3. ArrayList 方法:

  • Add:将对象添加到ArrayList的结尾处。
  • AddRange:将数组的元素添加到ArrayList的末尾。
  • Clear:从ArrayList中移除所有元素。
  • IndexOf(Object):第一个匹配的索引。
  • IndexOf(Object, Int32):指定初始查询位置。
  • Insert:将元素插入ArrayList的指定索引处。
  • InsertRange:将数组元素插入ArrayList的指定索引处。
  • LastIndexOf(Object):搜索指定要素,并返回整个ArrayList中最后一个匹配项的索引。
  • LastIndexOf(Object, Int32):搜素int32范围内最后一个匹配的索引。
  • Remove:从ArrayList中移除特定对象的第一个匹配项。
  • RemoveAt:移除ArrayList的指定索引处的元素。
  • RemoveRange:从ArrayList中移除一定范围的元素,索引+个数。
  • Reverse:将整个ArrayList中元素的顺序反转。
  • Reverse(Int32, Int32):将指定范围中元素的顺序反转。
  • Sort:对整个ArrayList中的元素进行排序。
  • ToString:返回表示当前对象的字符串。

4. ArrayList 属性:

  • Capacity:获取或设置ArrayList可包含的元素数。
  • Count:获取ArrayList中实际包含的元素数。

 

View Code - 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个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● Hashtable 类

1. Hashtable类在System.Collections命名空间中!

Hashtable ht = new ArrayList();
Hashtable ht = new ArrayList(5);

 

View Code - 遍历Hashtable2例
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 方法:

  • Add:将带有指定键和值的元素添加到Hashtable。
  • Clear:从Hashtable中移除所有元素。
  • Contains:确定Hashtable是否包含特定键。
  • ContainsKey:同上。
  • ContainsValue:确定Hashtable是否包含特定值。
  • Remove:从Hashtable中移除带有指定键的元素。
  • ToString:返回表示当前对象的字符串。

3. Hashtable 属性:

  • Count:获取包含在Hashtable中的键/值对的数目。
  • Keys:获取包含Hashtable中的键的ICollection。

4. Values:获取包含Hashtable中的值的ICollection。

DictionaryEntry 结构:用来遍历Hashtable中的成员。

  • Key:键值
  • Value:值

① 用 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个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● Random 类

1. 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。

2. Random 构造函数:

  • Random():使用与时间相关的默认种子值,初始化Random类的新实例。所以在一个循环中生成的随机数是相同的。
  • Random(Int32):使用指定的种子值初始化Random类的新实例。每个数字对着一个随机数,同一范围内的这个数是不变的。
  • View Code - Random()举例
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {
    staticvoid Main(string[] args)
    {
    for (int i = 1; i < 10;i++ )
    {
    Random num = new Random();
    Random num2 = new Random();
    int a = num.Next(10);
    int b = num2.Next(10);
    Console.WriteLine("{0} ----- {1}",a,b);
    }

    }
    }
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //4 ----- 4
    //请按任意键继续. . .
    }
  • View Code - Random(Int32)举例
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {
    staticvoid Main(string[] args)
    {
    for (int i = 1; i < 10;i++ )
    {
    Random num = new Random(i);
    Random num2 = new Random(i);
    int a = num.Next(10);
    int b = num2.Next(10);
    Console.WriteLine("{0} ----- {1}",a,b);
    }

    }
    }
    //2 ----- 2
    //7 ----- 7
    //2 ----- 2
    //8 ----- 8
    //3 ----- 3
    //8 ----- 8
    //3 ----- 3
    //9 ----- 9
    //4 ----- 4
    //请按任意键继续. . .
    }

3. Random 方法:

  • Next():返回非负随机数。
  • Next(Int32):返回一个小于所指定最大值的非负随机数。
    返回值不包括Max!
  • Next(Int32, Int32):返回一个指定范围内的随机数。
    返回的值中包括Min,不包括Max!
  • NextDouble:返回一个介于0.0和1.0之间的随机数。
  • NextBytes:用随机数填充指定字节数组的元素,0-255.
  • View Code - NextBytes
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {
    staticvoid Main(string[] args)
    {
    Random rnd = new Random();
    Byte[] b = new Byte[10];
    rnd.NextBytes(b);
    Console.WriteLine("The Random bytes are: ");
    for (int i = 0; i < 10; i++)
    {
    Console.Write(i);
    Console.Write(":");
    Console.WriteLine(b[i]);
    }


    }
    }


    }

※ Random 扩展:http://www.cnblogs.com/zhanqi/archive/2011/03/25/1996013.html

---------------------------------------------------------------------------------------------------------

            ╔════════╗
╠════╣    第A5个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● Math 类

1. 数学相关的类。

2. Math 方法:

  • Acos:返回余弦值为指定数字的角度。
  • Asin:返回正弦值为指定数字的角度。
  • Atan:返回正切值为指定数字的角度。
  • Atan2:返回正切值为两个指定数字的商的角度。
  • Cos:返回指定角度的余弦值。
  • Sin:返回指定角度的正弦值。
  • Tan:返回指定角度的正切值。
  • Abs:返回指定数字的绝对值。
  • Ceiling:返回大于或等于指定数字的最小整数。
  • Floor:返回小于或等于指定数字的最大整数。
  • Round:将值舍入到接近的整数或指定的小数位数
    • Round(Double):四舍五入。
    • Round(Double, Int32):四舍五入,小数位数。
    • Round(Double, MidpointRounding)
    • Round(Double, Int32, MidpointRounding)
    • MidpointRounding.ToEven:舍入最接近的偶数。   2.5 → 2
    • MidpointRounding.AwayFromZero:舍入绝对值较大的值。   2.5 → 3
  • Exp:返回e的指定次幂。
  • Pow:返回指定数字的指定次幂。
  • Log10:返回指定数字以10为低的对数。
  • Log:返回指定数字的对数。
    • Lg(Double):返回指定数字的自然对数(底为e)。
    • Log(Double, Double):返回指定数字在使用指定底数时的对数。
    • Log(1000, 10) = 3    底数写在后面。
  • Max:返回两个指定数字中较大的一个。
  • Min:返回两个指定数字中较小的一个。
  • Sqrt:返回指定数字的平方根。
  • Truncate:计算一个数字的整数部分。

3. Math 字段:

  • E:表示自然对数的底,它由常数e指定。
  • PI:表示圆的周长与其直径的比值。

---------------------------------------------------------------------------------------------------------

            ╔════════╗
╠════╣    第A6个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● DateTime 结构

1. 表示时间上的一刻,通常以日期和当天的时间表示。

2. DateTime 结构构造函数:

  • DateTime(Int64):将 DateTime 结构的新实例初始化为指定的刻度数。
  • DateTime(Int32, Int32, Int32):将 DateTime 结构的新实例初始化为指定的年、月和日。
  • DateTime(Int32, Int32, Int32, Int32, Int32, Int32):将 DateTime 结构的新实例初始化为指定的年、月、日、小时、分钟和秒。
  • DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32):将 DateTime 结构的新实例初始化为指定的年、月、日、小时、分钟、秒和毫秒。

3. DateTime 结构属性:

  • Now:获取当前时间。(static)
    • ToLongDateString:将当前 DateTime 对象的值转换为其等效的长日期字符串表示形式。
      举例:2012年2月17日
    • ToLongTimeString:将当前 DateTime 对象的值转换为其等效的长时间字符串表示形式。
      举例:16:16:16
    • ToShortDateString:将当前 DateTime 对象的值转换为其等效的短日期字符串表示形式。
      举例:2012/2/17
    • ToShortTimeString:将当前 DateTime 对象的值转换为其等效的短时间字符串表示形式。
      举例:16:16
  • Today:获取当前日期。(static)
  • Date:获取此实例的日期部分。
  • Year:获取此实例所表示日期的年份部分。
  • Month:获取此实例所表示日期的月份部分。
  • Day:获取此实例所表示的日期为该月中的第几天。
  • DayOfWeek:获取此实例所表示的日期是星期几。
  • DayOfYear:获取此实例所表示的日期是该年中的第几天。
  • Hour:获取此实例所表示日期的小时部分。
  • Minute:获取此实例所表示日期的分钟部分。
  • Second:获取此实例所表示日期的秒部分。
  • Millisecond:毫秒。
  • Ticks:刻度数。
  • TimeOfDay:获取此实例的当天的时间。

4. DateTime 结构字段:

  • MaxValue:最大值。(static)
  • MinValue:最小值。(static)

5. DateTime 结构方法(方法产生效果,但是自身没变化):

  • Add:将指定的TimeSpan的值加到此实例的值上。
  • AddYears:
  • AddMonths:
  • AddDays:
  • AddHours:
  • AddMinutes:
  • AddSeconds:
  • AddMilliseconds:毫秒
  • AddTicks:刻度数,1s = 10000000刻度数 
  • Compare:s
  • CompareTo:
  • Equals:s

参考:http://zhidao.baidu.com/question/246229487.html

---------------------------------------------------------------------------------------------------------

            ╔════════╗
╠════╣    第A7个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● TimeSpan 结构

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个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● DateAndTime 类

1. 先要:using Microsoft.VisualBasic;

    在这之前 添加引用.net的Microsoft.VisualBasic 项!在“解决方案资源管理器”中的引用中操作!

2. DateAndTime 模块包含在日期和时间操作中使用的过程和属性。

3. DateAndTime 方法:

  • DateDiff(DateInterval, DateTime, DateTime, FirstDayOfWeek, FirstWeekOfYear):返回一个 Long 值,该值指定两个 Date 值之间的时间间隔数。(后-前)
    • Interval:必选。DateInterval 枚举值或 String 表达式,表示要用作 Date1 和 Date2 之间差额的单位的时间间隔。
    • Date1:必选。Date.要在计算中使用的第一个日期/时间值。
    • Date2:必选。Date.要在计算中使用的第二个日期/时间值。
    • DayOfWeek:可选。从 FirstDayOfWeek 枚举中选择的值,用于指定一周的第一天。如果未指定,则使用 FirstDayOfWeek.Sunday。
    • WeekOfYear:可选。从 FirstWeekOfYear 枚举中选择的值,用于指定一年的第一周。如果未指定,则使用 FirstWeekOfYear.Jan1。

---------------------------------------------------------------------------------------------------------

            ╔════════╗
╠════╣    第A9个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● Format 格式

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。如 果多个分隔符不是位于紧挨小数点分隔符左侧的位置或字符串中最右边的位置,则只将它们视作指定使用千位分隔符。在某些区域设置中,句点用作千位分隔符。格 式化输出中用作千位分隔符的实际字符取决于系统所识别的“数字格式”。这样,即使所在的区域使用句点作为千位分隔符,也应该使用逗号作为格式中的千位分隔 符。格式化的字符串将以相应于区域设置的正确格式显示。例如,请考虑以下三个格式字符串:
    • "#,0.",该字符串以千位分隔符将数字 1 亿格式化为字符串“100,000,000”。
    • "#0,.",该字符串将一千作为比例因子,将数字 1 亿格式化为字符串“100000”。
    • "#,0,.",该字符串使用千位分隔符并将一千作为比例因子,将数字 1 亿格式化为字符串“100,000”。
    (:) 时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由系统设置确定。
    (/) 日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由系统设置确定。
    (E- E+ e- e+) 科学格式。如果格式表达式在 E-E+e-e+ 的左侧至少包含一个数字占位符(0#),则数字将以科学格式显示,并在数字与其指数之间插入 Ee。左侧数字占位符的个数确定指数中数字的个数。使用 E-e- 在负指数旁边放置减号。使用 E+e+ 在负指数旁边放置减号,在正指数旁边放置加号。还必须在该符号的右侧包含数字占位符,才能获得正确的格式设置。
    - + $ ( ) 原义字符。这些字符显示后的外观与在格式字符串中键入时的外观完全一样。若要显示列出的这些字符之外的某个字符,请在字符前加反斜杠 (\) 或将字符括在双引号 (" ") 中。
    (\) 显示格式字符串中的下一个字符。若要将具有特殊意义的字符显示为原义字符,请在其前面加反斜杠 (\)。反斜杠本身不显示。使用反斜杠的效果与将下一个字符括在双引号中相同。若要显示反斜杠,请使用两个反斜杠 (\\)。不能显示为原义字符的字符示例包括:日期格式字符和时间格式字符(acdhmnpqstwy/:);数字格式字符(#0%Ee、逗号和句点)以及字符串格式字符(@&<>!)。
    ("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

你可能感兴趣的:(C#)