跳至頁尾內容
.NET 幫助

C# 參數(開發者如何理解其工作原理)

C# 中的params關鍵字是 .NET 中的一個強大功能,它允許方法接受可變數量的參數。 這可以顯著簡化呼叫需要不同數量參數的方法時的語法。 在本綜合指南中,我們將探討 C# 中的params關鍵字,包括其語法、用例和最佳實踐。 本文稍後將介紹Iron SoftwareIronPDF庫,並解釋如何使用params關鍵字和 IronPDF 產生 PDF。

C# Params 參數類型是什麼?

在 C# 領域,方法通常遵循一組預先確定的參數。 然而,在某些情況下,人們可能會發現自己無法確定某個方法需要多少個參數。 輸入"params"關鍵字,即可指定一個能夠容納參數數組的方法參數。 當開發人員事先不確定參數的確切數量時,此功能非常有用,它允許在方法聲明中傳遞不確定數量或可選數量的相同類型的參數。

public class ParamsExample
{
    // Method accepting a variable number of string arguments using the params keyword
    public void PrintMessages(params string[] messages)
    {
        foreach (var message in messages)
        {
            Console.WriteLine(message);
        }
    }
}

// Usage
class Program
{
    public static void Main()
    {
        var example = new ParamsExample();
        example.PrintMessages("Hello", "World", "!");
    }

    // More examples
    public static void AddItemsToShoppingBasket(params string[] items)
    {
        // Implementation to add items to a shopping basket
    }

    public static void AddItemsSumToShoppingBasket(params int[] sum) // Using params with int
    {
        // Implementation to add sum of items to the shopping basket
    }
}
public class ParamsExample
{
    // Method accepting a variable number of string arguments using the params keyword
    public void PrintMessages(params string[] messages)
    {
        foreach (var message in messages)
        {
            Console.WriteLine(message);
        }
    }
}

// Usage
class Program
{
    public static void Main()
    {
        var example = new ParamsExample();
        example.PrintMessages("Hello", "World", "!");
    }

    // More examples
    public static void AddItemsToShoppingBasket(params string[] items)
    {
        // Implementation to add items to a shopping basket
    }

    public static void AddItemsSumToShoppingBasket(params int[] sum) // Using params with int
    {
        // Implementation to add sum of items to the shopping basket
    }
}
$vbLabelText   $csharpLabel

AddItemsToShoppingBasket方法可以接受可變數量的字串參數作為參數。 params關鍵字簡化了方法呼叫的語法,允許開發人員直接傳遞可選參數,而無需明確建立陣列輸入。

class Program
{
    public static void Main()
    {
        AddItemsToShoppingBasket("cake", "pizza", "cold drink");
        AddItemsToShoppingBasket("snacks", "burger");
        AddItemsToShoppingBasket(); // Valid even with zero parameters, using default value
    }
}
class Program
{
    public static void Main()
    {
        AddItemsToShoppingBasket("cake", "pizza", "cold drink");
        AddItemsToShoppingBasket("snacks", "burger");
        AddItemsToShoppingBasket(); // Valid even with zero parameters, using default value
    }
}
$vbLabelText   $csharpLabel

注意事項和最佳實踐

-將參數放在參數清單末端:建議將 params 參數放在方法參數清單的末端。這種做法有助於提高程式碼清晰度,減少方法呼叫過程中的混淆。 為了有效組織結構,需要明確取值的參數應放在其他參數之前。

-明確指定非參數參數:當使用params呼叫方法時,請確保明確提供非params參數的值。 這種做法可以防止歧義,並保證使用所需數量的參數準確地呼叫該方法。

-謹慎行事,避免歧義:在使用具有多個重載或相同類型參數的方法中的params時,請務必保持警覺。 編譯器可能難以確定要呼叫的適當方法,從而導致歧義錯誤。

-探索其他方法:雖然params提供了便利,但在某些情況下可以考慮其他方法。 利用List等集合List對於需要增強功能或傳遞命名參數符合您的目標的情況,這可能是更可取的做法。

-謹慎應用於相關場景:在參數數量可變且可能在不同方法呼叫之間波動的場景中,謹慎部署params 。 僅在參數數量不可預測的情況下才可使用此方法,而應避免在參數數量固定且已知的情況下使用此方法。

參數類型的一維數組

也可以透過向其傳遞一維數組來使用AddItemsToShoppingBasket

class Program
{
    public static void Main()
    {
        var items = new string[] { "cold drink", "snack", "roll" }; // 1D string array
        AddItemsToShoppingBasket(items); // Works as expected
        AddItemsToShoppingBasket("cold drink", "coke", "roll"); // Similar result to the above line
    }
}
class Program
{
    public static void Main()
    {
        var items = new string[] { "cold drink", "snack", "roll" }; // 1D string array
        AddItemsToShoppingBasket(items); // Works as expected
        AddItemsToShoppingBasket("cold drink", "coke", "roll"); // Similar result to the above line
    }
}
$vbLabelText   $csharpLabel

傳遞一個以逗號分隔的相同類型參數數組

可以透過在方法呼叫中傳遞變數列表/陣列來呼叫AddItemsToShoppingBasket如下所示。

class Program
{
    public static void Main()
    {
        // Example method signature
        AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // Comma separated values
        AddItemsToShoppingBasket("snacks");
    }
}
class Program
{
    public static void Main()
    {
        // Example method signature
        AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // Comma separated values
        AddItemsToShoppingBasket("snacks");
    }
}
$vbLabelText   $csharpLabel

傳遞一個已定義類型的數組

陣列應包含與 params 方法中定義的類型相同的類型; 否則,將拋出錯誤。

// Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger"); // Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4); // Error since params type is string
// Example that results in an error
AddItemsToShoppingBasket("snacks", 2, "burger"); // Error due to type mismatch
AddItemsToShoppingBasket(2, 3, 4); // Error since params type is string
$vbLabelText   $csharpLabel

如果方法中定義的params類型不匹配,則會發生語法錯誤。

方法中的最後一個參數始終是

方法簽章中, params參數之後不允許新增其他參數。 方法參數聲明中只允許有一個params參數。 定義錯誤會導致編譯錯誤。

class Program
{
    static void Main(string[] args)
    {
        // Example 1
        public static void AddItemsToShoppingBasket(double total, params string[] items)
        {
            // Works fine as `params` is the last parameter
        }

        // Example 2, error scenario
        public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
        {
            // Error: `params` keyword must be the last parameter 
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        // Example 1
        public static void AddItemsToShoppingBasket(double total, params string[] items)
        {
            // Works fine as `params` is the last parameter
        }

        // Example 2, error scenario
        public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total)
        {
            // Error: `params` keyword must be the last parameter 
        }
    }
}
$vbLabelText   $csharpLabel

僅一個params關鍵字

方法簽章中只允許有一個params參數。 如果在方法簽章中找到多個params關鍵字,編譯器將會拋出錯誤。

class Program
{
    static void Main(string[] args)
    {
        public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
        {
            // Compiler Error: Only one params keyword is allowed in the method signature
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity)
        {
            // Compiler Error: Only one params keyword is allowed in the method signature
        }
    }
}
$vbLabelText   $csharpLabel

你無法提出任何論點

如果一個方法帶有params關鍵字的參數,則可以不帶任何參數來呼叫該方法,編譯器不會報錯。

AddItemsToShoppingBasket(); // Works as expected
AddItemsToShoppingBasket(); // Works as expected
$vbLabelText   $csharpLabel

對於任何帶有params參數的參數,它被視為可選參數,無需傳遞參數即可呼叫。

程式碼範例

建立一個新的控制台應用程式。 開啟 Visual Studio,建立一個新項目,並選擇控制台應用程式類型。

C# 參數(開發者如何理解):圖 1 - 建立新的控制台應用程式

現在加入以下程式碼。

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] samples)
        {
            for (int i = 0; i < samples.Length; i++)
            {
                cart.Add(samples[i]);
            }
        }

        // Caller code
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("-------------------------------------------------------");
        Console.WriteLine("Display Cart");

        foreach (var item in cart)
        {
            Console.WriteLine(item);
        }
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] samples)
        {
            for (int i = 0; i < samples.Length; i++)
            {
                cart.Add(samples[i]);
            }
        }

        // Caller code
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("-------------------------------------------------------");
        Console.WriteLine("Display Cart");

        foreach (var item in cart)
        {
            Console.WriteLine(item);
        }
    }
}
$vbLabelText   $csharpLabel

輸出

C# 參數(開發者使用方法):圖 2 - 以上程式碼輸出

IronPDF簡介

Iron Software 的 IronPDF C# PDF 庫是一個功能強大的庫,可以在 C# 中讀取、寫入和管理 PDF 文件。 它支援各種現代應用程式開發,例如行動應用程式、網站、桌面應用程式、Docker 等。它也支援不同的作業系統,例如 Windows、Linux、Unix 等。它不依賴原生作業系統方法。

IronPDF 在HTML 轉 PDF 方面表現出色,可確保精確保留原始佈局和樣式。 它非常適合從基於 Web 的內容(例如報告、發票和文件)建立 PDF。 IronPDF 支援 HTML 檔案、URL 和原始 HTML 字串,可以輕鬆產生高品質的 PDF 文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
$vbLabelText   $csharpLabel

安裝

可以使用NuGet套件管理器控制台透過下列命令安裝 IronPDF 庫,也可以使用 Visual Studio 套件管理器安裝。

Install-Package IronPdf

使用 IronPDF 產生 PDF

現在我們將使用 IronPDF 從上述範例中產生 PDF 文件。

using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;

class Program
{
    public static void Main()
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] items)
        {
            for (int i = 0; i < items.Length; i++)
            {
                cart.Add(items[i]);
            }
        }

        // Take input from console
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();

        // Read the items
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }

        // Add to cart
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("------------------------------------------------");
        Console.WriteLine("Display Cart");
        Console.WriteLine("------------------------------------------------");

        string name = "Sam";
        var count = cart.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
        string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
        + @"
</body>
</html>";

        // Create a new PDF document
        var pdfDoc = new ChromePdfRenderer();
        pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;

class Program
{
    public static void Main()
    {
        List<string> cart = new List<string>();

        void AddItemsToShoppingBasket(params string[] items)
        {
            for (int i = 0; i < items.Length; i++)
            {
                cart.Add(items[i]);
            }
        }

        // Take input from console
        Console.WriteLine("Enter the cart items as comma separated values");
        var itemsString = Console.ReadLine();

        // Read the items
        if (itemsString != null)
        {
            var items = itemsString.Split(",").ToArray();
            AddItemsToShoppingBasket(items);
        }

        // Add to cart
        AddItemsToShoppingBasket("Sample1", "Sample2");

        Console.WriteLine("------------------------------------------------");
        Console.WriteLine("Display Cart");
        Console.WriteLine("------------------------------------------------");

        string name = "Sam";
        var count = cart.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} items in the cart.</p>
" +
        string.Join("\n", cart.Select(x => $"<p>{x}</p>"))
        + @"
</body>
</html>";

        // Create a new PDF document
        var pdfDoc = new ChromePdfRenderer();
        pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf");
    }
}
$vbLabelText   $csharpLabel

在上面的程式碼中,我們正在為購物車專案產生一個 HTML 文檔,然後使用IronPDF將其儲存為 PDF 文件。

輸出

C# 參數(開發者使用方法):圖 3 - 上述程式碼的 PDF 輸出

授權許可(提供免費試用)

IronPDF 需要許可證密鑰才能在生產環境中使用。 您可以點擊此處造訪授權頁面以取得試用金鑰。 將金鑰放入 appsettings.json 檔案中。

"IronPdf.LicenseKey": "your license key"

請提供您的電子郵件地址,即可收到發送到您信箱的試用許可證。

結論

C# 中的params關鍵字提供了一種靈活的方式來處理需要可變數量參數的方法。 它簡化了方法調用,使程式碼更易讀、更易於維護。 結合IronPDF ,這為任何程式設計師編寫簡潔程式碼提供了絕佳的技能組合。

常見問題解答

C# 中的 'params' 關鍵字是什麼?

C# 中的「params」關鍵字允許方法接受可變數量的參數,從而簡化了呼叫具有不同參數數量的方法的語法。

在方法簽名中,'params' 關鍵字是如何運作的?

在方法簽章中,'params' 關鍵字用於參數類型和參數名稱之前,允許方法接受任意數量的該類型的參數作為陣列。

帶有參數的方法可以接受零個參數嗎?

是的,帶有“params”參數的方法可以不帶任何參數調用,因為“params”參數被視為可選參數。

在 C# 中使用「params」的最佳實踐是什麼?

最佳實踐包括將“params”參數放在參數列表的末尾,明確指定非“params”參數,並且僅在參數數量可能變化時謹慎使用它。

C# 方法可以有多個 'params' 參數嗎?

不,C# 方法只能有一個 'params' 參數,而且它必須是方法簽章中的最後一個參數。

在 C# 中使用「params」如何提高方法的靈活性?

在 C# 方法中使用「params」可以讓開發人員編寫更靈活的程式碼,可以處理動態數量的參數,從而更容易維護和擴展。

如何將“params”關鍵字與用於文件產生的 C# 庫結合使用?

'params' 關鍵字可以與 C# 庫一起使用,為文件產生任務傳遞靈活數量的參數,例如使用 IronPDF 建立具有不同內容的 PDF。

如何使用 C# 函式庫將 HTML 轉換為 PDF?

您可以使用像 IronPDF 這樣的 C# 程式庫,透過諸如RenderHtmlAsPdf用於 HTML 字串)或RenderHtmlFileAsPdf (用於 HTML 檔案)之類的方法將 HTML 轉換為 PDF。

C# 中 'params' 關鍵字有哪些常見用法?

'params' 關鍵字的常見用例包括需要處理數量不等的輸入的方法,例如記錄訊息、數學運算或建立字串輸出。

如何在專案中整合用於 PDF 處理的 C# 庫?

要整合像 IronPDF 這樣的用於 PDF 操作的 C# 庫,您可以使用 NuGet 透過命令dotnet add package [LibraryName]安裝它,然後使用其 API 執行 PDF 任務。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。