.NET 幫助

C#選用參數(對開發人員的運作方式)

發佈 2024年4月29日
分享:

在 C# 中,可选参数或可选参数提供了一種方法來简化函数调用,允許省略某些参数。 此功能透過減少所需的重載方法數量來提升程式碼的可讀性和可維護性。 當方法定義中的參數被宣告具有預設值時,它變得可選,也就是說你可以在調用該方法時省略它。 我們將探討C#中的可選參數和該IronPDF 程式庫適用於 .NET PDF 解決方案.

在 C# 中定義可選參數

基本語法

要定義一個可選參數,您需要在方法的聲明中為其賦予預設值。 此預設值必須為常數表達式。 以下是如何在方法定義中定義一個或多個可選的預設參數的方式:

public static void DisplayGreeting(string message, string end = "!")
{
    Console.WriteLine(message + end);
}
public static void DisplayGreeting(string message, string end = "!")
{
    Console.WriteLine(message + end);
}
Public Shared Sub DisplayGreeting(ByVal message As String, Optional ByVal [end] As String = "!")
	Console.WriteLine(message & [end])
End Sub
VB   C#

在上面的代碼片段中,'end' 是一個可選參數,其默認參數值為 '!'. 這允許該方法在有或沒有提供第二個參數的情況下被調用。

使用可選參數的方法調用

以下是調用上述方法的兩種方式:

static void Main()
{
    DisplayGreeting("Hello"); // Outputs: Hello!
    DisplayGreeting("Hello", "?"); // Outputs: Hello?
}
static void Main()
{
    DisplayGreeting("Hello"); // Outputs: Hello!
    DisplayGreeting("Hello", "?"); // Outputs: Hello?
}
Shared Sub Main()
	DisplayGreeting("Hello") ' Outputs: Hello!
	DisplayGreeting("Hello", "?") ' Outputs: Hello?
End Sub
VB   C#

第一次呼叫省略了第二個參數,使用了預設值。 第二次調用提供了一個具體值,覆蓋了默認值。

使用具名和選用參數

在 C# 中,具名與選擇性參數增進了涉及選擇性參數的方法呼叫的清晰度。 它們允許在調用中直接命名參數來指定賦值的參數。

使用命名參數範例

// named parameters
public static void ConfigureDevice(string deviceName, bool enableLogging = false, int timeout = 30)
{
    Console.WriteLine($"Configuring {deviceName}: Logging={(enableLogging ? "On" : "Off")}, Timeout={timeout}s");
}
// named parameters
public static void ConfigureDevice(string deviceName, bool enableLogging = false, int timeout = 30)
{
    Console.WriteLine($"Configuring {deviceName}: Logging={(enableLogging ? "On" : "Off")}, Timeout={timeout}s");
}
' named parameters
Public Shared Sub ConfigureDevice(ByVal deviceName As String, Optional ByVal enableLogging As Boolean = False, Optional ByVal timeout As Integer = 30)
	Console.WriteLine($"Configuring {deviceName}: Logging={(If(enableLogging, "On", "Off"))}, Timeout={timeout}s")
End Sub
VB   C#

您可以使用具名參數來指定順序以外的值或跳過可選參數。

static void Main()
{
    ConfigureDevice("Router", timeout: 60);
}
static void Main()
{
    ConfigureDevice("Router", timeout: 60);
}
Shared Sub Main()
	ConfigureDevice("Router", timeout:= 60)
End Sub
VB   C#

此呼叫使用一個可選參數來指定 timeout 的值,並使用 enableLogging 的預設值。

結合固定和可選參數

方法可以具有必要的參數(固定參數)和可選參數。 在方法宣告中,必要參數必須始終位於可選參數之前,如以下程式碼片段所示。

範例程式碼

public static void CreateProfile(string firstName, string lastName, int age = 25, string city = "Unknown")
{
    Console.WriteLine($"Name: {firstName} {lastName}, Age: {age}, City: {city}");
}
public static void CreateProfile(string firstName, string lastName, int age = 25, string city = "Unknown")
{
    Console.WriteLine($"Name: {firstName} {lastName}, Age: {age}, City: {city}");
}
Public Shared Sub CreateProfile(ByVal firstName As String, ByVal lastName As String, Optional ByVal age As Integer = 25, Optional ByVal city As String = "Unknown")
	Console.WriteLine($"Name: {firstName} {lastName}, Age: {age}, City: {city}")
End Sub
VB   C#

調用方法

static void Main()
{
    CreateProfile("John", "Doe"); // Uses default age and city
    CreateProfile("Jane", "Doe", 30, "New York"); // Specifies all parameters
}
static void Main()
{
    CreateProfile("John", "Doe"); // Uses default age and city
    CreateProfile("Jane", "Doe", 30, "New York"); // Specifies all parameters
}
Shared Sub Main()
	CreateProfile("John", "Doe") ' Uses default age and city
	CreateProfile("Jane", "Doe", 30, "New York") ' Specifies all parameters
End Sub
VB   C#

省略參數的靈活性允許在不同的上下文中使用同一方法,而不需要多個重載。

預設值必須是常量表達式

可選參數的預設參數必須是常量表達式,這些表達式在編譯時評估。這確保了預設值始終穩定且可預測。

正確使用預設值

public static void SendEmail(string address, string subject = "No Subject", string body = "")
{
    Console.WriteLine($"Sending email to {address}\nSubject: {subject}\nBody: {body}");
}
public static void SendEmail(string address, string subject = "No Subject", string body = "")
{
    Console.WriteLine($"Sending email to {address}\nSubject: {subject}\nBody: {body}");
}
Imports Microsoft.VisualBasic

Public Shared Sub SendEmail(ByVal address As String, Optional ByVal subject As String = "No Subject", Optional ByVal body As String = "")
	Console.WriteLine($"Sending email to {address}" & vbLf & "Subject: {subject}" & vbLf & "Body: {body}")
End Sub
VB   C#

重載與可選參數

雖然方法重載涉及為不同的用例創建多個方法簽名,但使用可選參數允許單個方法處理各種情況。

透過代碼比較

重載方法可能看起來像這樣:

// method overloading
public static void Alert(string message)
{
    Console.WriteLine(message);
}
public static void Alert(string message, bool urgent)
{
    if (urgent)
        Console.WriteLine("Urgent: " + message);
    else
        Console.WriteLine(message);
}
// method overloading
public static void Alert(string message)
{
    Console.WriteLine(message);
}
public static void Alert(string message, bool urgent)
{
    if (urgent)
        Console.WriteLine("Urgent: " + message);
    else
        Console.WriteLine(message);
}
' method overloading
Public Shared Sub Alert(ByVal message As String)
	Console.WriteLine(message)
End Sub
Public Shared Sub Alert(ByVal message As String, ByVal urgent As Boolean)
	If urgent Then
		Console.WriteLine("Urgent: " & message)
	Else
		Console.WriteLine(message)
	End If
End Sub
VB   C#

使用選擇性參數的等效方法:

public static void Alert(string message, bool urgent = false)
{
    if (urgent)
        Console.WriteLine("Urgent: " + message);
    else
        Console.WriteLine(message);
}
public static void Alert(string message, bool urgent = false)
{
    if (urgent)
        Console.WriteLine("Urgent: " + message);
    else
        Console.WriteLine(message);
}
Public Shared Sub Alert(ByVal message As String, Optional ByVal urgent As Boolean = False)
	If urgent Then
		Console.WriteLine("Urgent: " & message)
	Else
		Console.WriteLine(message)
	End If
End Sub
VB   C#

C# 選擇性參數(對開發人員的運作方式):圖 1 - 選擇性參數輸出

使用可選參數的好處

可選參數簡化了方法介面並減少了需要多個重載的情況。 它們使方法更加靈活,並使代碼庫更易於維護和理解。

可选参数的挑战

如果過度使用,可選參數可能會導致對每個方法的期望和正確執行所需的條件感到困惑。 它們可以掩蓋方法的意圖,特別是當參數很多或預設值不夠自明時。

最佳實踐

  1. 限制選用參數:謹慎使用選用參數,以避免方法簽名過於複雜。

  2. 使用命名參數:在方法調用中提升清晰度,特別是當略過某些可選參數時。

  3. 文件預設值:記錄每個參數的作用及其預設值所意味的內容,以防止誤用或混淆。

使用 IronPDF 與 C# 可選參數

C# 選擇性參數(開發人員的工作原理):圖 2 - IronPDF

IronPDF 是一個有用的 .NET 程式庫,允許開發人員在他們的應用程式中直接創建、操作和呈現 PDF 文件。 它高效地將HTML轉換為PDF用於 PDF 轉換。 這個 HTML 可以是各種形式,如 HTML 字串、HTML 文件或 URL。 它非常適合需要動態生成 PDF 文件的應用程式,例如發票、報告或自訂的用戶內容。 使用 IronPDF,開發人員可以充分利用 .NET Framework 高效處理 PDF 文件。

IronPDF 的突出功能是其能夠輕鬆將 HTML 轉換為 PDF,保留佈局和樣式。 它非常適合從網頁內容生成PDF,例如報告、發票或文件。 您可以使用它將 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");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

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

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

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

結合 IronPDF 與 C# 的選擇性參數可以輕鬆生成 PDF 文件的過程。 通過使用可選參數,開發人員可以創建靈活的 PDF 生成方法,這些方法可以用最少的方法重載適應不同的輸入和需求。

範例程式碼

以下是一個範例,展示了如何使用IronPDF和C#選擇性參數從簡單的HTML模板生成自訂的PDF報告,並可能調整如標題和是否包含某些報告部分等細節:

using IronPdf;
using System;
public class PdfReportGenerator
{
    // Method to generate PDF with optional parameters
    public static void CreatePdfReport(string htmlContent, string filePath = "Report.pdf", bool includeCharts = true, string reportTitle = "Monthly Report")
    {
        // Optional parameters allow customization of the report's title and content dynamically
        var renderer = new ChromePdfRenderer();
        // Customize the PDF document
        renderer.RenderingOptions.TextHeader.CenterText = reportTitle;
        renderer.RenderingOptions.TextFooter.CenterText = "Generated on " + DateTime.Now.ToString("dd-MM-yyyy");
        renderer.RenderingOptions.MarginTop = 50;  // Set the top margin
        renderer.RenderingOptions.MarginBottom = 50;  // Set the bottom margin
        if (!includeCharts)
        {
            // Modify HTML content to remove chart sections if not included
            htmlContent = htmlContent.Replace("<div class='charts'></div>", "");
        }
        // Render the HTML to PDF
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the generated PDF to a file
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF report has been created at {filePath}");
    }
    static void Main()
    {
        License.LicenseKey = "License-Key";
        string htmlTemplate = @"
        <html>
        <head>
            <title>Monthly Report</title>
        </head>
        <body>
            <h1>Monthly Performance Report</h1>
            <p>This section contains text describing the overall performance for the month.</p>
            <div class='charts'>
                <h2>Sales Charts</h2>
                <!-- Placeholder for charts -->
            </div>
        </body>
        </html>";
        // Call the CreatePdfReport method with different parameters
        CreatePdfReport(htmlTemplate, "BasicReport.pdf", false, "Basic Monthly Report");
        CreatePdfReport(htmlTemplate, "FullReport.pdf", true, "Detailed Monthly Report");
    }
}
using IronPdf;
using System;
public class PdfReportGenerator
{
    // Method to generate PDF with optional parameters
    public static void CreatePdfReport(string htmlContent, string filePath = "Report.pdf", bool includeCharts = true, string reportTitle = "Monthly Report")
    {
        // Optional parameters allow customization of the report's title and content dynamically
        var renderer = new ChromePdfRenderer();
        // Customize the PDF document
        renderer.RenderingOptions.TextHeader.CenterText = reportTitle;
        renderer.RenderingOptions.TextFooter.CenterText = "Generated on " + DateTime.Now.ToString("dd-MM-yyyy");
        renderer.RenderingOptions.MarginTop = 50;  // Set the top margin
        renderer.RenderingOptions.MarginBottom = 50;  // Set the bottom margin
        if (!includeCharts)
        {
            // Modify HTML content to remove chart sections if not included
            htmlContent = htmlContent.Replace("<div class='charts'></div>", "");
        }
        // Render the HTML to PDF
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the generated PDF to a file
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF report has been created at {filePath}");
    }
    static void Main()
    {
        License.LicenseKey = "License-Key";
        string htmlTemplate = @"
        <html>
        <head>
            <title>Monthly Report</title>
        </head>
        <body>
            <h1>Monthly Performance Report</h1>
            <p>This section contains text describing the overall performance for the month.</p>
            <div class='charts'>
                <h2>Sales Charts</h2>
                <!-- Placeholder for charts -->
            </div>
        </body>
        </html>";
        // Call the CreatePdfReport method with different parameters
        CreatePdfReport(htmlTemplate, "BasicReport.pdf", false, "Basic Monthly Report");
        CreatePdfReport(htmlTemplate, "FullReport.pdf", true, "Detailed Monthly Report");
    }
}
Imports IronPdf
Imports System
Public Class PdfReportGenerator
	' Method to generate PDF with optional parameters
	Public Shared Sub CreatePdfReport(ByVal htmlContent As String, Optional ByVal filePath As String = "Report.pdf", Optional ByVal includeCharts As Boolean = True, Optional ByVal reportTitle As String = "Monthly Report")
		' Optional parameters allow customization of the report's title and content dynamically
		Dim renderer = New ChromePdfRenderer()
		' Customize the PDF document
		renderer.RenderingOptions.TextHeader.CenterText = reportTitle
		renderer.RenderingOptions.TextFooter.CenterText = "Generated on " & DateTime.Now.ToString("dd-MM-yyyy")
		renderer.RenderingOptions.MarginTop = 50 ' Set the top margin
		renderer.RenderingOptions.MarginBottom = 50 ' Set the bottom margin
		If Not includeCharts Then
			' Modify HTML content to remove chart sections if not included
			htmlContent = htmlContent.Replace("<div class='charts'></div>", "")
		End If
		' Render the HTML to PDF
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		' Save the generated PDF to a file
		pdf.SaveAs(filePath)
		Console.WriteLine($"PDF report has been created at {filePath}")
	End Sub
	Shared Sub Main()
		License.LicenseKey = "License-Key"
		Dim htmlTemplate As String = "
        <html>
        <head>
            <title>Monthly Report</title>
        </head>
        <body>
            <h1>Monthly Performance Report</h1>
            <p>This section contains text describing the overall performance for the month.</p>
            <div class='charts'>
                <h2>Sales Charts</h2>
                <!-- Placeholder for charts -->
            </div>
        </body>
        </html>"
		' Call the CreatePdfReport method with different parameters
		CreatePdfReport(htmlTemplate, "BasicReport.pdf", False, "Basic Monthly Report")
		CreatePdfReport(htmlTemplate, "FullReport.pdf", True, "Detailed Monthly Report")
	End Sub
End Class
VB   C#

以下是 FullReport PDF 文件的預覽:

C# 選用參數(開發者如何使用):圖3 - PDF報告輸出

範例程式碼中的 CreatePdfReport 方法被設計用來從 HTML 內容生成 PDF 文件,並提供靈活性,例如檔案路徑、圖表的包含和報告標題等可選參數。 此設計允許該方法通過微小的代碼調整來適應不同的報告需求。 在方法中,IronPDF 設置被調整為在 PDF 中包含自定義的頁眉和頁腳,這些設置被設定為顯示報告標題和報告生成的日期。

邊距也被配置來改善文件的視覺佈局。 根據 includeCharts 參數為真或假,HTML 內容將動態地修改,以包含或排除圖表視覺效果。 最後,可能修改過的 HTML 被轉換成 PDF 並保存到指定位置。 此範例展示了如何通過選用參數顯著簡化製作量身定制的 PDF 報告的過程。

結論

C# 選擇性參數(如何為開發者工作):圖 4 - 許可

總之,可選參數通過減少對多個重載方法的需求,使開發人員能夠創建更具彈性和可維護性的代碼。 透過將 C# 選擇性參數與 IronPDF 函式庫結合,開發人員可以高效生成自訂的 PDF 文件。 這種整合不僅簡化了代碼庫,還增強了功能,使其更容易適應不同的報告需求或用戶偏好。

IronPDF 本身是任何 .NET 開發人員希望將 PDF 功能整合到其應用程式中的強大工具,提供一個IronPDF 免費試用版開發人員專用希望測試其功能的人員。 對於持續使用,許可證的價格從 $749 起,提供專業級 PDF 處理的經濟有效解決方案。

< 上一頁
C# 子字串(開發者如何運作)
下一個 >
Resharper C#(它如何為開發人員工作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >