
C# Params (jak to działa dla programistów)
Slowo kluczowe params w C# jest potężną funkcjonalnością w .NET, która pozwala metodzie akceptować zmienną liczbę argumentów. Może to znacznie uprościć składnię podczas wywoływania metod wymagających zmiennej liczby parametrów. W tym obszernym przewodniku zbadamy słowo kluczowe params w C#, jego składnię, przypadki użycia i najlepsze praktyki. Później w tym artykule przedstawimy bibliotekę IronPDF od Iron Software i wyjaśnimy, jak używać słowa kluczowego params oraz IronPDF do generowania plików PDF.
Czym jest typ argumentów Params w C#?
W języku C# metody zazwyczaj stosują się do z góry określonego zestawu parametrów. Niemniej jednak zdarzają się sytuacje, w których można mieć wątpliwości co do dokładnej liczby argumentów przeznaczonych dla danej metody. Wprowadź słowo kluczowe "params" – rozwiązanie umożliwiające określenie parametru metody, który może pomieścić tablicę argumentów. Ta funkcjonalność okazuje się nieoceniona, gdy programista nie jest z góry pewien dokładnej liczby argumentów, ułatwiając przekazywanie nieokreślonej lub opcjonalnej liczby parametrów, wszystkie tego samego typu, w ramach deklaracji metody.
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 ClassMetodę AddItemsToShoppingBasket można wywołać z zmienną liczbą argumentów parametrów typu string. Slowo kluczowe params upraszcza składnię wywołania metody, pozwalając programistom przekazać opcjonalne parametry bezpośrednio, bez konieczności jawnego tworzenia tablicy jako wejścia.
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 ClassUwagi i najlepsze praktyki
-
Umieszczanie parametru params na końcu listy parametrów: Zalecaną praktyką jest umieszczenie parametru params na końcu listy parametrów metody. Praktyka ta zwiększa przejrzystość, ograniczając niejasności podczas wywoływania metod. Parametry wymagające podania konkretnych wartości powinny poprzedzać parametry, aby zapewnić efektywną organizację.
-
Jawne Określenie Nie-parametrów: Podczas wywoływania metody z
paramsupewnij się, że jawnie dostarczasz wartości dla parametrów nie-params. Takie postępowanie zapobiega niejasnościom i gwarantuje poprawne wywołanie metody z wymaganą liczbą argumentów. -
Zachowanie ostrożności w celu zapobieżenia niejasności: Czujność jest kluczowa, gdy używa się
paramsw metodach z wieloma przeciążeniami lub gdy istnieją parametry tego samego typu. Kompilator może mieć trudności z określeniem odpowiedniej metody do wywołania, co może skutkować błędami niejednoznaczności. -
Badanie alternatywnych podejść: Chociaż
paramsoferuje wygodę, rozważ alternatywne metody w określonych sytuacjach. Wykorzystanie kolekcji, takich jakList<t>, może być korzystniejsze dla rozszerzonych funkcjonalności lub gdy przekazywanie nazwanych parametrów jest zgodne z twoimi celami. -
Stosowanie Rozważnie W Stosownych Przypadkach: Zastosuj
paramsrozważnie w przypadkach, gdy liczba parametrów jest zmienna i może się różnić w różnych wywołaniach metody. Należy stosować go wyłącznie w sytuacjach, w których liczba parametrów jest nieprzewidywalna, unikając jego użycia, gdy liczba parametrów jest stała i znana.
Jednowymiarowa tablica jako typ parametru
AddItemsToShoppingBasket można również użyć, wywołując go z jednowymiarową tablicą.
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 ClassPrzekaż tablicę argumentów tego samego typu, rozdzielonych przecinkami
AddItemsToShoppingBasket można wywołać przekazując listę/tablicę zmiennych w wywołaniu metody jak poniżej.
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 ClassPrzekazanie tablicy typu zdefiniowanego
Tablica powinna zawierać ten sam typ, który został zdefiniowany w metodzie params; w przeciwnym razie zostanie zgłoszony błąd.
// 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 stringWystępuje błąd składni, jeśli istnieje niezgodność typu z zdefiniowanym params w metodzie.
Zawsze ostatni parametr w metodzie
W metodzie w sygnaturze nie są dozwolone żadne dodatkowe parametry po parametrze params. Tylko jeden argument params jest dozwolony w deklaracji parametrów metody. Nieprawidłowe zdefiniowanie tego prowadzi do błędów kompilacji.
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
}
}
}Module Program
Sub Main(args As String())
' Example 1
Public Sub AddItemsToShoppingBasket(total As Double, ParamArray items As String())
' Works fine as `ParamArray` is the last parameter
End Sub
' Example 2, error scenario
' Public Sub AddItemsToShoppingBasket(ParamArray items As String(), total As Decimal, total As Integer)
' Error: `ParamArray` keyword must be the last parameter
' End Sub
End Sub
End ModuleTylko jedno słowo kluczowe params
Tylko jeden parametr params w sygnaturze metody jest dozwolony. Kompilator wyrzuci błąd, jeśli w sygnaturze metody znajdzie się więcej niż jedno słowo kluczowe 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
}
}
}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 ClassNie można podawać żadnych argumentów
Jeśli metoda ma parametr ze słowem kluczowym params, może być wywołana bez żadnych argumentów, a kompilator nie wyrzuci błędu.
AddItemsToShoppingBasket(); // Works as expectedAddItemsToShoppingBasket() ' Works as expectedDla każdego parametru z argumentem params jest on uznawany za parametr opcjonalny i może być wywołany bez przekazywania parametrów.
Przyklad kodu
Utwórz nową aplikację konsolową. Otwórz program Visual Studio, utwórz nowy projekt i wybierz typ aplikacji konsolowej.

Teraz dodaj poniższy kod.
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
Module Program
Sub Main(args As String())
Dim cart As New List(Of String)()
Sub AddItemsToShoppingBasket(ParamArray samples As String())
For i As Integer = 0 To samples.Length - 1
cart.Add(samples(i))
Next
End Sub
' 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(","c)
AddItemsToShoppingBasket(items)
End If
AddItemsToShoppingBasket("Sample1", "Sample2")
Console.WriteLine("-------------------------------------------------------")
Console.WriteLine("Display Cart")
For Each item In cart
Console.WriteLine(item)
Next
End Sub
End ModuleWynik

Przedstawiamy IronPDF
Biblioteka IronPDF C# PDF firmy Iron Software to wszechstronna biblioteka, która umożliwia odczyt, zapis i zarządzanie dokumentami PDF w języku C#. Obsługuje wszelkiego rodzaju nowoczesne aplikacje, takie jak aplikacje mobilne, strony internetowe, aplikacje desktopowe, Docker itp. Obsługuje również różne systemy operacyjne, takie jak Windows, Linux, Unix itp. Nie jest zależny od natywnych metod systemu operacyjnego.
IronPDF wyróżnia się w konwersji HTML do PDF, zapewniając precyzyjne zachowanie oryginalnych układów i stylów. Idealnie nadaje się do tworzenia plików PDF z treści internetowych, takich jak raporty, faktury i dokumentacja. Dzięki obsłudze plików HTML, adresów URL i surowych ciągów znaków HTML, IronPDF z łatwością tworzy wysokiej jakości dokumenty 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 ClassInstalacja
Bibliotekę IronPDF można zainstalować za pomocą konsoli menedżera pakietów NuGet, używając poniższego polecenia, lub za pomocą menedżera pakietów Visual Studio.
Wykorzystanie IronPDF do generowania pliku PDF
Teraz użyjemy IronPDF do wygenerowania dokumentu PDF na podstawie powyższego przykładu.
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 ClassW powyższym kodzie generujemy dokument HTML dla pozycji w koszyku, a następnie zapisujemy go jako dokument PDF przy użyciu IronPDF.
Wynik

Licencjonowanie (dostępna bezpłatna wersja próbna)
IronPDF wymaga klucza licencyjnego do działania w środowisku produkcyjnym. Klucz próbny można uzyskać na stronie licencji tutaj. Umieść klucz w pliku appsettings.json.
"IronPdf.LicenseKey": "your license key"
Podaj swój adres e-mail, aby otrzymać Licencję Trial na swoją skrzynkę pocztową.
Wnioski
Slowo kluczowe params w C# oferuje elastyczny sposób na obsługę metod wymagających zmiennej liczby parametrów. Upraszcza wywołania metod i sprawia, że kod jest bardziej czytelny i łatwiejszy w utrzymaniu. W połączeniu z IronPDF stanowi to doskonałe zestawienie umiejętności, pozwalające każdemu programiście pisać przejrzysty kod.

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.
Powiązane artykuły


