C#中out,ref,Parse的的引數以及使用方法
out的使用方法
1.如果方法的引數用out修飾了。那麼這個引數必須在方法裡進行賦值。
2.out修飾方法的引數了,那麼在方法外面,可以被給這個引數賦值,但在方法裡面必須給這個out修飾符的引數賦值
3.另外,引數加out,是把這個方法中的引數的值傳到方法外面了。
如以下例項
static void Main(string[] args) { int num1 ; int num2 = 80; int numSum = Show(out num1,num2); Console.WriteLine(num1); Console.WriteLine(num2 ); Console.ReadKey(); } public static int Show(out int number1,int number2) { number1 =90; return number1+ 10; }
out傳多個返回值的方法
static void Main(string[] args) { int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int max ; int min; int sum =ArraySum(nums,out max, out min); } public static int ArraySum(int []numbers,out int max,out int min) { max = int.MaxValue; min = int.MinValue; int sum = 0; for (int i = 0; i < numbers.Length; i++) { if (numbers[i] > max) { max = numbers[i]; } if (numbers[i] < min) { min = numbers[i]; } sum += numbers[i]; } return sum; }
方法的out引數和ref引數
ref用的時候必須給要給這個變數賦值,和out有區別,out可以把方法裡的值傳出去,
ref可以把值傳到方法裡,有可以把值傳到方法外
ref是有進有出,而out是隻出不進。
out與ref區別:
同:
1、都能返回多個返回值。
2、若要使用 ref 和out引數,則方法定義和呼叫方法都必須顯式使用 ref和out 關鍵字。在方法中對引數的設定和改變將會直接影響函式呼叫之處(引數的初始值)。
異:
1.ref指定的引數在函式呼叫時候必須初始化,不能為空的引用。而out指定的引數在函式呼叫時候可以不初始化;out指定的引數
2.在進入函式時會清空自己,必須在函式內部賦初值。而ref指定的引數不需要。
ref和out的功能
1、使用ref型引數時,傳入的引數必須先被初始化,對out而言,必須在方法中對其完成初始化。
2、使用ref和out時,在方法的引數和執行方法時,都要加Ref或Out關鍵字,以滿足匹配。
3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被呼叫的方法修改呼叫者的引用的時候。
4、ref傳進去的引數在函式內部可以直接使用,而out不可。
5、系統對ref的限制是更少一些的。
6、若要使用 ref 引數,必須將引數作為 ref 引數顯式傳遞到方法,ref 引數的值被傳遞到 ref 引數。
7、當希望方法返回多個值時,宣告 out 方法非常有用;使用 out 引數的方法仍然可以返回一個值。
擴充套件資料:
out:標識一個引數值會受影響的引數,但在傳入方法時,該引數無需先初始化。
ref:標識一個引數值可能會受影響的引數。
int.Parse(string型別變數名)
該方式是將數字內容的字串轉為int型別,如果字串內容為空或者null時,則丟擲ArgumentNullException異常;如果字串內容不是數字,則丟擲FormatException異常;如果字串內容所表示數字超出int型別可表示的範圍,則丟擲OverflowException異常。
使用該方法切忌的一點就是隻能處理字串內容,而且字串內容只能在int型別可表示的範圍之內。
int.TryParse(string s, out int result)
該方式也是將數字內容的字串轉為int型別,但是該方式比int.Parse優越的地方,就是它不會出現異常。如果轉換成功返回 true,如果轉換失敗返回 false。很明顯,最後一個引數為輸出值,如果轉換失敗,輸出值為 0;如果轉換成功,則輸出相應的值。
TryParse方法例項
static void Main(string[] args)
{
Console.WriteLine("請輸入一個數字");
string strNumber = Console.ReadLine();
int num;
bool result = Program.MyTryParse(strNumber,out num);
bool result1 = int.TryParse(strNumber, out num);
}
public static bool MyTryParse(string s,out int result)
{
result = 0;
try
{
result = Convert.ToInt32(s);
return true;
}
catch
{
return false;
}