.NET 帮助 C# Params(开发人员如何使用) Curtis Chau 已更新:六月 22, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article C#中的params关键字是.NET中的一个强大功能,允许方法接受可变数量的参数。 这可以显著简化调用需要不同数量参数的方法时的语法。 在本综合指南中,我们将探讨C#中的params关键字、其语法、使用案例和最佳实践。 Later in this article, we will introduce the IronPDF library from Iron Software and explain how to use the params keyword and IronPDF to generate PDFs. 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 } } Public Class ParamsExample ' Method accepting a variable number of string arguments using the params keyword Public Sub PrintMessages(ParamArray ByVal messages() As String) For Each message In messages Console.WriteLine(message) Next message End Sub End Class ' Usage Friend Class Program Public Shared Sub Main() Dim example = New ParamsExample() example.PrintMessages("Hello", "World", "!") End Sub ' More examples Public Shared Sub AddItemsToShoppingBasket(ParamArray ByVal items() As String) ' Implementation to add items to a shopping basket End Sub Public Shared Sub AddItemsSumToShoppingBasket(ParamArray ByVal sum() As Integer) ' Using params with int ' Implementation to add sum of items to the shopping basket End Sub End Class $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 } } Friend Class Program Public Shared Sub Main() AddItemsToShoppingBasket("cake", "pizza", "cold drink") AddItemsToShoppingBasket("snacks", "burger") AddItemsToShoppingBasket() ' Valid even with zero parameters, using default value End Sub End Class $vbLabelText $csharpLabel 考虑事项和最佳实践 将Params放在参数列表的结尾: 推荐的最佳实践是将params参数放在方法参数列表的最后。这一实践促进了清晰度,从而在方法调用时减少混乱。 需要明确值的参数应在params前面以便有效组织。 明确指定非params参数: 使用params时调用方法时,确保为非params参数明确提供值。 这种做法防止了模棱两可,并确保方法被准确调用所需的参数数量。 谨慎使用以防止歧义: 在使用包含多个重载或相同类型参数的方法中的params时,谨慎是关键。 编译器可能会难以确定调用哪种方法,可能导致歧义错误。 探索替代方法: 虽然params提供了便利,但在某些场景中应考虑替代方法。 使用集合如List<T>可能因其增强功能而更受欢迎,或者当传递命名参数与您的目标一致时。 在相关场景中慎重应用: 在参数数量可变且不同方法调用之间可能会波动的场景中,谨慎地部署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 } } Friend Class Program Public Shared Sub Main() Dim 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 End Sub End Class $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"); } } Friend Class Program Public Shared Sub Main() ' Example method signature AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink") ' Comma separated values AddItemsToShoppingBasket("snacks") End Sub End Class $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 ' 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 } } } Friend Class Program Shared Sub Main(ByVal args() As String) ' Example 1 'INSTANT VB TODO TASK: Local functions are not converted by Instant VB: ' public static void AddItemsToShoppingBasket(double total, params string[] items) ' { ' ' Works fine as `params` is the last parameter ' } ' Example 2, error scenario 'INSTANT VB TODO TASK: Local functions are not converted by Instant VB: ' public static void AddItemsToShoppingBasket(params string[] items, decimal total, int total) ' { ' ' Error: `params` keyword must be the last parameter ' } End Sub End Class $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 } } } Friend Class Program Shared Sub Main(ByVal args() As String) 'INSTANT VB TODO TASK: Local functions are not converted by Instant VB: ' public static void AddItemsToShoppingBasket(params string[] items, params string[] quantity) ' { ' ' Compiler Error: Only one params keyword is allowed in the method signature ' } End Sub End Class $vbLabelText $csharpLabel 您可以不传递参数 如果方法有一个带有params关键字的参数,它可以在没有任何参数的情况下被调用,并且编译器不会报错。 AddItemsToShoppingBasket(); // Works as expected AddItemsToShoppingBasket(); // Works as expected AddItemsToShoppingBasket() ' Works as expected $vbLabelText $csharpLabel 对于任何带有params参数的参数,它被视为一个可选参数,可以在不传递参数的情况下调用。 代码示例 创建一个新的控制台应用程序。 打开Visual Studio,创建一个新项目,并选择控制台应用程序类型。 !C# Params(它对开发者的工作机制):图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); } } } Imports System Imports System.Collections.Generic Friend Class Program Shared Sub Main(ByVal args() As String) Dim cart As New List(Of String)() 'INSTANT VB TODO TASK: Local functions are not converted by Instant VB: ' 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") Dim itemsString = Console.ReadLine() If itemsString IsNot Nothing Then Dim items = itemsString.Split(",").ToArray() AddItemsToShoppingBasket(items) End If AddItemsToShoppingBasket("Sample1", "Sample2") Console.WriteLine("-------------------------------------------------------") Console.WriteLine("Display Cart") For Each item In cart Console.WriteLine(item) Next item End Sub End Class $vbLabelText $csharpLabel 输出 !C# Params(它对开发者的工作机制):图2 - 上述代码输出 介绍IronPDF Iron Software的IronPDF C# PDF库是一款多功能库,可以在C#中读取、写入和管理PDF文档。 它支持所有类型的现代应用程序开发,如移动端、网站、桌面端、Docker等。且支持不同操作系统如Windows、Linux、Unix等。它不依赖于本机操作系统方法。 IronPDF在HTML到PDF转换方面表现出色,确保精确保留原始布局和样式。 它非常适合从基于Web的内容中创建PDF,如报告、发票和文档。 利用对HTML文件、URL和原始HTML字符串的支持,IronPDF轻松生成高质量的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 $vbLabelText $csharpLabel 安装 IronPDF库可以使用NuGet包管理器控制台通过以下命令或使用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"); } } Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Linq Imports IronPdf Friend Class Program Public Shared Sub Main() Dim cart As New List(Of String)() 'INSTANT VB TODO TASK: Local functions are not converted by Instant VB: ' 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") Dim itemsString = Console.ReadLine() ' Read the items If itemsString IsNot Nothing Then Dim items = itemsString.Split(",").ToArray() AddItemsToShoppingBasket(items) End If ' Add to cart AddItemsToShoppingBasket("Sample1", "Sample2") Console.WriteLine("------------------------------------------------") Console.WriteLine("Display Cart") Console.WriteLine("------------------------------------------------") Dim name As String = "Sam" Dim count = cart.Count Dim content As String = $"<!DOCTYPE html> <html> <body> <h1>Hello, {name}!</h1> <p>You have {count} items in the cart.</p> " & String.Join(vbLf, cart.Select(Function(x) $"<p>{x}</p>")) & " </body> </html>" ' Create a new PDF document Dim pdfDoc = New ChromePdfRenderer() pdfDoc.RenderHtmlAsPdf(content).SaveAs("cart.pdf") End Sub End Class $vbLabelText $csharpLabel 在上面的代码中,我们正在生成购物车项目的HTML文档,然后使用IronPDF将其保存为PDF文档。 输出 !C# Params(它对开发者的工作机制):图3 - 代码以上PDF输出 许可(提供免费试用) IronPDF在生产环境中需要许可证密钥。 可以从许可证页面这里获得试用密钥。 将密钥放置在appsettings.json中。 "IronPdf.LicenseKey": "your license key" 提供您的电子邮件ID以获取试用许可证,将其发送到您的电子邮件ID。 结论 C#中的params关键字提供了一种灵活的方法来处理需要可变数量参数的方法。 它简化了方法调用,使代码更具可读性和可维护性。 与IronPDF一起,它是任何程序员编写干净代码的绝佳技能组合。 常见问题解答 C#中的'params'关键字是什么? C#中的'params'关键字允许方法接受可变数量的参数,简化了调用拥有不同参数数量的方法的语法。 在方法签名中,'params'关键字如何运作? 在方法签名中,'params'关键字用于参数类型和参数名称之前,允许方法以数组的形式接受任意数量的该类型参数。 带有'params'的一个方法可以接受零个参数吗? 是的,带有'params'参数的方法可以在没有任何参数的情况下被调用,因为'params'参数被视为可选。 在C#中使用'params'的最佳实践是什么? 最佳实践包括将'params'参数放在参数列表的末尾,明确指定非'params'参数,且谨慎使用,仅在参数数量可变时使用。 一个C#方法可以有多个'params'参数吗? 不,C#方法只能有一个'params'参数,并且它必须是方法签名中的最后一个参数。 使用'params'如何提高C#方法的灵活性? 在C#方法中使用'params'允许开发者编写更具灵活性的代码,可以处理动态数量的参数,使维护和扩展变得更容易。 如何将'params'关键字与C#库结合用于文档生成? 可以将'params'关键字与C#库结合使用,以传递可变数量的参数以进行文档生成任务,例如使用IronPDF创建内容不同的PDF。 如何使用C#库将HTML转换为PDF? 您可以使用像IronPDF这样的C#库通过使用RenderHtmlAsPdf方法来将HTML字符串或RenderHtmlFileAsPdf来将HTML文件转换为PDF。 C#中'params'关键字的一些常见用例是什么? 常见用例包括需要处理可变数量输入的方法,如日志信息记录、数学运算或字符串输出构建。 如何在项目中集成用于PDF操作的C#库? 要集成用于PDF操作的C#库,如IronPDF,可以使用命令dotnet add package [LibraryName]通过NuGet安装,并使用其API执行PDF任务。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新九月 4, 2025 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 已更新八月 5, 2025 C# Switch 模式匹配(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 C# PostgreSQL(开发人员如何使用)C# 枚举(开发人员如何使用)
已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多