C# 8.0和.NET Core 3.0高級編程 分享筆記二:編程基礎第二部分


這一篇是接上一篇筆記的第二部分。

2.5深入研究控制台應用程序

前面創建並使用了基本的控制台應用程序,下面更深入地研究它們。

控制台應用程序是基於文本的,在命令上運行的。它們通常執行需要編寫腳本的簡單任務,例如編譯文件或加密配置文件的一部分。

2.5.1向用戶顯示輸出

控制台應用程序執行的兩個最常見的任務是寫入和讀取數據。前者使用WriteLine方法來輸出數據,但是,如果不希望行的末尾有回車符,那么可以使用Write方法。

1.使用編號的位置參數進行格式化

生成格式化字符串的一種方法是使用編號的位置參數。

諸如Write和WriteLine的方法就支持這一特性,對於不支持這一特性的方法,可以使用string類型的Format方法對string 參數進行格式化。

(1)向Chapter02文件夾和工作區新添加一個名為Formatting的控制台應用程序項目。

(2)在Main方法中添加如下語句,聲明一些數值變量並將它們寫入控制台:

   int numberOfApples=12;
        decimal pricePerApple=0.35M;
        Console.WriteLine(format:"{0} numberOfApples costs{1:C}",
        arg0:numberOfApples,
        arg1:pricePerApple*numberOfApples);

        string formatted =string.Format(
            format:"{0} apples costs {1:C}",
            arg0:numberOfApples,arg1:pricePerApple*numberOfApples);
    Console.WriteLine(formatted);

觀察輸出內容。

2.使用內插字符串進行格式化

C#6.0及后續版本有一個方便的特性叫做內插字符串。以$為前綴的字符串可以在變量或表達式的名稱兩邊使用花括號,從而輸出變量或表達式在字符串中相應為止的當前值。

(1)在Main方法的底部輸入如下語句:

Console.WriteLine($"{numberOfApples} apples costs {pricePerApple*numberOfApples:C}");

(2)運行控制台應用程序並查看結果,輸入和上面的最后一個是一樣的。

對於短格式的字符串,內插字符串更容易閱讀。但是對於一行代碼需要跨多行顯示,這可能比較棘手。

2.5.2理解格式字符串

可以在逗號或冒號之后使用格式字符串對變量或表達式進行格式化。

N0格式的字符串表示有千位分隔符且沒用小數點的數字,而C格式的字符串表示貨幣。貨幣格式將由當前線程決定。例如,如果在英國的個人計算機上運行這段代碼,會得到英鎊,此時把都逗號作為千位分隔符;但如果在德國的個人計算機上運行這段代碼,會得到歐元,此時把圓點作為千位分隔符。

每個格式項都有一個對其選項,這在輸出值表時非常有用,其中一些值可能需要在字符寬度內左對齊或右對齊。值的對其處理是整數。正整數右對齊的,負整數是左對齊的。

例如,為了輸出一張水果表以及每類水果有多少個,你可能希望將左對齊到某一8字符長的列中,並將格式化為數字的計數值右對齊到另一6字符長的列中,列的小數位數為0.

(1)在Main方法的底部輸入如下語句:

Console.WriteLine(format:"{0,-8} {1,6:N0}",arg0:"Name",arg1:"Count" );
Console.WriteLine(format:"{0,-8} {1,6:N0}",arg0:applesText,arg1:applesCount);
Console.WriteLine(format:"{0,-8} {1,6:N0}",arg0:bananasText,arg1:bananasCount);

(2)運行控制台應用程序,注意對其后的效果,輸出如下所示:

Name Count
Apples 1,234
Bananas 56,789

2.5.3從用戶那里獲取文本輸入

可以使用ReadLine方法從用戶那里獲取文本輸入。ReadLine方法會等待用戶輸入一些文本。然后用戶以按Enter鍵,用戶輸入的任何內容都將作為字符串值返回。

(1)在Main方法中輸入如下語句,詢問用戶的姓名和年齡,然后輸出用戶輸入的內容:

Console.Write("Type your first name and press Enter: ");
string firstName=Console.ReadLine();
Console.Write("Type your age and press Enter:");
string age=Console.ReadLine();
Console.WriteLine($"Hello {firstName},you look good for{age}.");

(2)運行控制台應用程序。

(3)輸入姓名和年齡,輸出如下所示:

Type your first name and press Enter: duwenlong
Type your age and press Enter:30
Hello duwenlong,you look good for30.

2.5.4導入名稱空間

注意,與第一篇中的第一個應用程序不同,這里沒用在Console之前輸入System。這是因為System是名稱空間,類似於類型的地址。System.Console.WriteLine告訴編譯器在System名稱空間的Console類型中查找WriteLine方法。為了簡化代碼,dotnet new console命令在代碼文件的頂部添加了一條語句,告訴編譯器始終在System名稱空間中查找沒用加上名稱空間前綴的類型,如下所示:

using System;

我們稱這種操作為導入名稱空間。導入名稱空間的效果是,名稱空間中的所有可用類型都對程序可用,而不需要輸入名稱空間前綴,在編寫代碼時名稱空間將以智能感知的方式顯示。

2.5.5 簡化控制台的使用

在C#6.0及更高版本中,可以使用using語句進一步簡化代碼。然后就不需要在整個代碼中輸入Console類型了。可以使用Visual Studio Code 的Replace特性來刪除以前編寫的Console類型。

(1)在Program.cs文件的頂部添加一條語句來靜態導入System.Console類,如下所示:

using static System.Console;
(2)在代碼中選擇第一個Console,確保選擇了單詞Console之后的句點。

(3)導航到Edit|Replace,注意出現了覆蓋提示框,輸入想要的內容以替換Console。

(4)單擊Replace All按鈕以替換全部的Console,然后單擊右上角的十字按鈕已關閉覆蓋提示框。

2.5.6獲取用戶的重要輸入

可以使用ReadKey方法從用戶哪里獲得重要輸入。ReadKey方法會等待用戶輸入一些文本,然后用戶一按Enter鍵,用戶輸入的任何內容都將作為字符串值返回。

(1)在Main方法中輸入如下語句,要求用戶按任意組合鍵,然后輸出相關信息:

Write("Press any key combination:");
ConsoleKeyInfo key=ReadKey();
WriteLine();
WriteLine($"Key: {key.Key},Char: {key.KeyChar},Modifiers: {key.Modifiers}");

當我使用不同按鍵比如單個按鍵、組合鍵、功能鍵的時候,得到的結果是不一致的,可以嘗試以下。

2.5.7獲取參數

Main方法中的string[] args參數是什么? 它們是用於向控制台應用程序傳遞參數的數組,下面看它們具體是如何工作的。

命令行參數由空格分隔。其他字符被視為參數值的一部分。要在實參值中包含空格,請將實參值括在單引號或雙引號內。

假設我們希望能夠在命令行中輸入前景色和背景色的名稱以及終端窗口的大小。為此,可以從args數組中讀取顏色和數字,而args數組總是被傳遞給控制台應用程序的Main方法。

(1)為控制台應用程序項目創建一個名為Arguments的新文件夾,並將其添加到Chapter02工作區中。

(2)添加一條語句以靜態導入Ssytem.Console類型,再添加一條語句以輸出傳遞給應用程序的參數數量,如下所示:

 WriteLine($"There are {args.Length} arguments.");
         foreach (var item in args)
         {
             WriteLine(item);
         }

(3)輸出結果顯示了這四個參數的詳細信息,如下所示:

There are 4 arguments.
firstarg
second-arg
third:Arg
fourth arg

2.5.8使用參數設置選項

現在,這些參數將允許用戶為輸出窗口的背景、前景選擇顏色,並指定輸出窗口的寬度和高度。必須導入System名稱空間,這一編譯器才知道ConsoleColor和Enum類型。

(1)添加語句以警告用戶,如果它們不輸入完四個參數就解析這些參數,並使它們設置控制台的顏色和尺寸,將發出警告,如下所示:

if(args.Length<4)
{
    WriteLine("You must specify two colors and dimensions,e.g.");
    WriteLine("dotnet run red yellow 80 40");
    return;
}
ForegroundColor =(ConsoleColor)Enum.Parse(enumType:typeof(ConsoleColor),value:args[0],ignoreCase:true);
BackgroundColor=(ConsoleColor)Enum.Parse(enumType:typeof(ConsoleColor),value:args[1],ignoreCase:true);
 
 WindowWidth=int.Parse(args[2]);
 WindowHeight=int.Parse(args[3]);

(2)在終端窗口輸入以下命令:

dotnet run red yellow 50 10

在windows 上這個可以正常工作,觀察以下我們修改的內容。但是在其他系統上可能會出現問題,使用Try-Catch來包裹我們設置尺寸的的代碼。用來兼容不同的系統的顯示處理。

 try
 {
 WindowWidth=int.Parse(args[2]);
 WindowHeight=int.Parse(args[3]);
}
catch(PlatformNotSupportedException)
{
    WriteLine("The Current platform does not support changing the size of a console window.");
}

2.6 實踐

.2.6.1聯系數字的大小和范圍

創建一個名為Exercise02的控制台應用程序項目,輸出以下每種數字類型使用的內存字節數,以及他們可能具有的最小值和最大值:sbyte、byte、short、ushort、int、uint、long、ulong、float、double和decimal。

這里代碼就不貼啦。因為我也沒有做呢。練習一下:

我創建了一個C#相關的交流群。用於分享學習資料和討論問題。歡迎有興趣的小伙伴:QQ群:542633085


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM