Beginner with c# 7 (轉)
Beginner with c# 7 (轉)[@more@]1。7 語句(Statements)
借用了c/c++大多數的語句方法,不過仍然有些值得注意的地方。還有些地方是有所改動的。
在這裡,我只提一些c#特有的東東。
1。7。10 “foreach”語句
“foreach”語句列舉一個集合內的所有元素,並對這些元素一系列的操作。還是看看例子吧:*/
using System;
using System.Collections;
class Test
{
static void WriteList(ArrayList list) {
foreach ( o in list)
{
int i = (int) o;//如果是for語句,這裡一定會報錯!
Console.WriteLine(0);
Console.WriteLine(++i);
}
}
static void Main() {
ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++)
list.Add(i);
WriteList(list);
}
}
/*這個例子用“foreach”掃描了整個“list”,並把“list”中所有的元素列印出來。有時候還是
挺方便的。
1。7。15 檢查開關(The checked and unchecked statements)
“checked”和“unchecked”語句用來控制數學運算和完整型別轉換的檢查工作。“checked”檢查它
作用的域中可能出現的違例,並丟擲一個異常;而“unchecked”則阻止所有的檢查。舉個例子:*/
using System;
class Test
{
static int x = 1000000;
static int y = 1000000;
static int F() {
checked {return (x * y);} // 丟擲 OverflowException
}
static int G() {
unchecked {return (x * y);} // 返回 -727379968
}
static int H() {
return x * y; // 預設狀態。
}
static void Main() {
F(); //可以登出掉此行試試。
Console.WriteLine(G());
Console.WriteLine(H());
}
}
/*
在編譯過程中不會有任何錯誤出現。因為“checked”和“unchecked”只在執行時才起作用。值得一說的是
H()。它的預設狀態和當前的預設檢查的狀態有關。但返回的結果肯定和F()或G()中的任一個相同。
再看一個例子:*/
using System;
class Test
{
const int x = 1000000;
const int y = 1000000;
static int F() {
checked {return (x * y);} // 編譯器警告(Compile warning):溢位(overflow)
}
static int G() {
unchecked {return (x * y);} // 返回 -727379968
}
static int H() {
return x * y; // 編譯器警告(Compile warning):溢位(overflow)
}
static void Main() {
Console.WriteLine(F()); //可以登出掉此行試試。
Console.WriteLine(G());
Console.WriteLine(H()); //可以登出掉此行試試。
}
}
/* 當F()和H()求值的時候,就會引起一個編譯警告。而在G()中,因為有了“unchecked”,遮蔽了這個警
告。要注意的是“checked”和“unchecked”都不能對的返回值進行操作!比如:*/
class Test
{
static int Multiply(int x, int y) {
return x * y;
}
static int F() {
checked{ return Multiply(1000000, 1000000); } // 與 return Multiply(1000000, 1000000);
} // 有相同的效果。
}
/* 其實大家稍微想一下知道為什麼m$沒有這麼做!對這個內容的討論超出本文的範圍和俺的能力之外哦。
在c#中,所有的十六進位制數都是uint。如果用強制型別轉換會引起編譯器報錯。用“unchecked”則可以
跳過這個機制,把uint的十六進位制數轉化為int。如:*/
class Test
{
public const int AllBits = unchecked((int)0xFFFFFFFF);
public const int HighBit = unchecked((int)0x80000000);
}
/* 上例所有的常數都是uint,而且超過了int的範圍,沒有“unchecked”,這種轉換會引發一個編譯器錯
誤。注意:上面用的是“unchecked”運算子。不是語句。不過它們之間除了一個用“()”,另一個用
“{}”以外,幾乎一樣。BTW,“checked”同樣。
1。7。16 “lock”語句(The lock statement)
“lock”獲得一個相互排斥的鎖定。(俺查過一些資料,但都沒有清晰說明,暫不介紹)
借用了c/c++大多數的語句方法,不過仍然有些值得注意的地方。還有些地方是有所改動的。
在這裡,我只提一些c#特有的東東。
1。7。10 “foreach”語句
“foreach”語句列舉一個集合內的所有元素,並對這些元素一系列的操作。還是看看例子吧:*/
using System;
using System.Collections;
class Test
{
static void WriteList(ArrayList list) {
foreach ( o in list)
{
int i = (int) o;//如果是for語句,這裡一定會報錯!
Console.WriteLine(0);
Console.WriteLine(++i);
}
}
static void Main() {
ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++)
list.Add(i);
WriteList(list);
}
}
/*這個例子用“foreach”掃描了整個“list”,並把“list”中所有的元素列印出來。有時候還是
挺方便的。
1。7。15 檢查開關(The checked and unchecked statements)
“checked”和“unchecked”語句用來控制數學運算和完整型別轉換的檢查工作。“checked”檢查它
作用的域中可能出現的違例,並丟擲一個異常;而“unchecked”則阻止所有的檢查。舉個例子:*/
using System;
class Test
{
static int x = 1000000;
static int y = 1000000;
static int F() {
checked {return (x * y);} // 丟擲 OverflowException
}
static int G() {
unchecked {return (x * y);} // 返回 -727379968
}
static int H() {
return x * y; // 預設狀態。
}
static void Main() {
F(); //可以登出掉此行試試。
Console.WriteLine(G());
Console.WriteLine(H());
}
}
/*
在編譯過程中不會有任何錯誤出現。因為“checked”和“unchecked”只在執行時才起作用。值得一說的是
H()。它的預設狀態和當前的預設檢查的狀態有關。但返回的結果肯定和F()或G()中的任一個相同。
再看一個例子:*/
using System;
class Test
{
const int x = 1000000;
const int y = 1000000;
static int F() {
checked {return (x * y);} // 編譯器警告(Compile warning):溢位(overflow)
}
static int G() {
unchecked {return (x * y);} // 返回 -727379968
}
static int H() {
return x * y; // 編譯器警告(Compile warning):溢位(overflow)
}
static void Main() {
Console.WriteLine(F()); //可以登出掉此行試試。
Console.WriteLine(G());
Console.WriteLine(H()); //可以登出掉此行試試。
}
}
/* 當F()和H()求值的時候,就會引起一個編譯警告。而在G()中,因為有了“unchecked”,遮蔽了這個警
告。要注意的是“checked”和“unchecked”都不能對的返回值進行操作!比如:*/
class Test
{
static int Multiply(int x, int y) {
return x * y;
}
static int F() {
checked{ return Multiply(1000000, 1000000); } // 與 return Multiply(1000000, 1000000);
} // 有相同的效果。
}
/* 其實大家稍微想一下知道為什麼m$沒有這麼做!對這個內容的討論超出本文的範圍和俺的能力之外哦。
在c#中,所有的十六進位制數都是uint。如果用強制型別轉換會引起編譯器報錯。用“unchecked”則可以
跳過這個機制,把uint的十六進位制數轉化為int。如:*/
class Test
{
public const int AllBits = unchecked((int)0xFFFFFFFF);
public const int HighBit = unchecked((int)0x80000000);
}
/* 上例所有的常數都是uint,而且超過了int的範圍,沒有“unchecked”,這種轉換會引發一個編譯器錯
誤。注意:上面用的是“unchecked”運算子。不是語句。不過它們之間除了一個用“()”,另一個用
“{}”以外,幾乎一樣。BTW,“checked”同樣。
1。7。16 “lock”語句(The lock statement)
“lock”獲得一個相互排斥的鎖定。(俺查過一些資料,但都沒有清晰說明,暫不介紹)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987289/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Beginner with C# (轉)C#
- Beginner with c# 5 (轉)C#
- Beginner with c# 6 (轉)C#
- Beginner with c# 2 (轉)C#
- Beginner with c# 3 (轉)C#
- Beginner with c# 4 (轉)C#
- VB程式設計師眼中的C# 7 (轉)程式設計師C#
- 展望 C# 7C#
- 設計 C# 7C#
- QT beginner QFileDialogQT
- Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)
- 展望 C# 7 的未來C#
- WHAT IS C# (轉)C#
- C#:Dictionary轉DataTableC#
- 可怕的 C# (轉)C#
- C#聊天程式 (轉)C#
- C# 和 API (轉)C#API
- C#問答 (轉)C#
- c# DataTable轉ListC#
- C# 操作xml(轉)C#XML
- AtCoder Beginner Contest 360
- AtCoder Beginner Contest 343
- AtCoder Beginner Contest 344
- AtCoder Beginner Contest 345
- AtCoder Beginner Contest 346
- atcoder beginner 346 題解
- 【AtCoder Beginner Contest 347】
- AtCoder Beginner Contest 348
- AtCoder Beginner Contest 347
- AtCoder Beginner Contest 349
- AtCoder Beginner Contest 363
- AtCoder Beginner Contest 364
- AtCoder Beginner Contest 365
- AtCoder Beginner Contest 361
- AtCoder Beginner Contest 361)
- AtCoder Beginner Contest 362
- AtCoder Beginner Contest 366
- AtCoder Beginner Contest 369