C# Params(開発者向けの動作方法)
C# の params キーワードは、メソッドが可変数の引数を受け入れることを可能にする.NETの強力な機能です。 これは、可変個数のパラメーターを必要とするメソッドを呼び出す際の構文を大幅に簡素化できます。 この包括的なガイドでは、C# の params キーワード、その構文、使用例、およびベスト プラクティスについて説明します。 この記事の後半では、 Iron SoftwareのIronPDFライブラリを紹介し、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
}
}
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
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
考慮事項とベストプラクティス
- Params をパラメータリストの最後に配置する: params パラメータをメソッドのパラメータリストの最後に配置することが推奨されます。これにより、メソッド呼び出し時の混乱を軽減し、明瞭性が向上します。 明示的な値を必要とするパラメーターは、効果的な整理のためにparamsの前に配置するべきです。
-非パラメータ パラメータを明示的に指定する: params を使用してメソッドを呼び出す場合は、params 以外のパラメータの値が明示的に指定されていることを確認します。 この方法は曖昧さを防ぎ、必要な引数の数でメソッドが正確に呼び出されることを保証します。
-曖昧さを防ぐために注意を払う:同じ型の複数のオーバーロードまたはパラメータを持つメソッドで params を使用する場合は、注意が重要です。 コンパイラは適切なメソッドの呼び出しを決定するのに苦労する可能性があり、曖昧さのエラーを引き起こす可能性があります。
-代替アプローチの検討: params は便利ですが、特定のシナリオでは代替方法を検討してください。 機能を拡張する場合や、名前付きパラメータを渡すことが目的に合致する場合、List<t> などのコレクションを利用することが望ましい場合があります。
-関連するシナリオに慎重に適用する:パラメータ数が可変であり、個別のメソッド呼び出し間で変動する可能性があるシナリオでは、params を慎重に展開します。 パラメータ数が予測不可能な状況にその使用を保留し、パラメータ数が固定されていて既知の状況には適用しないでください。
パラメータータイプ用の一次元配列
AddItemsToShoppingBasket は 1 次元配列で呼び出すことによっても使用できます。
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
同一タイプの引数のカンマ区切り配列を渡す
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
定義されたタイプの配列を渡す
配列は、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
メソッド内で定義された params と型が一致しない場合、構文エラーが発生します。
常にメソッド内の最後のパラメーター
メソッド シグネチャ内の params パラメータの後には追加のパラメータは許可されません。 メソッド パラメータ宣言では、1 つの 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
キーワードは1つだけ
メソッド シグネチャ内で許可される params パラメータは 1 つだけです。 メソッド シグネチャ内に複数の 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
引数を渡さないことができる
メソッドに params キーワードを含むパラメータがある場合、引数なしで呼び出すことができ、コンパイラはエラーをスローしません。
AddItemsToShoppingBasket(); // Works as expected
AddItemsToShoppingBasket(); // Works as expected
AddItemsToShoppingBasket() ' Works as expected
params 引数を持つパラメータはオプションのパラメータとみなされ、パラメータを渡さずに呼び出すことができます。
コード例
新しいコンソールアプリケーションを作成します。 Visual Studioを開き、新しいプロジェクトを作成してコンソールアプリケーションタイプを選択します。

次に、以下のコードを追加します。
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
出力

IronPDFの紹介
Iron SoftwareのIronPDF C# PDFライブラリは、C#でPDFドキュメントを読み書きおよび管理できる多用途なライブラリです。 モバイル、ウェブサイト、デスクトップ、Dockerなど、あらゆる種類のモダンなアプリケーション開発をサポートしています。また、Windows、Linux、Unixなどの異なるOSもサポートしています。その方法はネイティブOSメソッドに依存しません。
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
インストール
IronPDFライブラリは、以下のコマンドを使用してNuGetパッケージマネージャーコンソールを使用するか、Visual Studioパッケージマネージャーを使用してインストールできます。
Install-Package IronPdf
IronPDFを使用したPDFの生成
次に、上記の例からPDFドキュメントを生成するためにIronPDFを使用します。
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
上記のコードで、カートアイテムのHTMLドキュメントを生成し、それをIronPDFを使用してPDFドキュメントとして保存しています。
出力

ライセンス (無料トライアル利用可能)
IronPDFは、製品版で機能するためにライセンスキーが必要です。 試用キーはこちらのライセンスページから取得できます。 キーをappsettings.jsonに配置してください。
"IronPdf.LicenseKey": "your license key"
試用ライセンスをメールで受け取るためにメールアドレスを提供してください。
結論
C# の params キーワードは、可変数のパラメータを必要とするメソッドを柔軟に処理する方法を提供します。 メソッドコールを簡素化し、コードの読みやすさと保守性を向上させます。 IronPDFと共に、クリーンなコードを書くための優れたスキルの組み合わせは、あらゆるプログラマーにとって優れた組み合わせです。
よくある質問
C# における 'params' キーワードとは何ですか?
C# の 'params' キーワードは、メソッドが任意の数の引数を受け入れることを可能にし、多様なパラメーター数でメソッドを呼び出すための構文を簡素化します。
メソッドシグネチャにおいて 'params' キーワードはどのように機能しますか?
メソッドシグネチャにおいて、'params' キーワードはパラメータ型とパラメータ名の前に使用され、その型の任意の数の引数を配列として受け入れることを可能にします。
‘params’ 付きのメソッドは引数なしで受け入れられますか?
はい、'params' パラメータを持つメソッドは引数なしで呼び出すことができ、'params' パラメータはオプションとして扱われます。
C# における 'params' の使用に関するベストプラクティスは何ですか?
ベストプラクティスには、'params' パラメータをパラメータリストの最後に配置し、非 'params' パラメータを明示的に指定し、パラメータ数が変わる場合のみ慎重に使用することが含まれます。
C# メソッドには複数の 'params' パラメーターを持つことができますか?
いいえ、C# メソッドには1つの 'params' パラメータしか持てません。これはメソッドシグネチャの最後のパラメータでなければなりません。
C# の 'params' を使用することで、メソッドの柔軟性をどのように高めることができますか?
C# メソッドで 'params' を使用することで、動的なパラメータ数を処理できるより柔軟なコードを書くことが可能になり、保守性と拡張性が向上します。
'params' キーワードをドキュメント生成用 C# ライブラリとどのように組み合わせることができますか?
'params' キーワードは C# ライブラリと組み合わせて、IronPDF を使用して様々な内容でPDFを生成するなど、ドキュメント生成タスクに柔軟な数のパラメータを渡すのに使えます。
C# ライブラリを使用して HTML を PDF に変換するにはどうすれば良いですか?
IronPDF のような C# ライブラリを使用して、HTML ストリングの RenderHtmlAsPdf メソッドや HTML ファイルの RenderHtmlFileAsPdf メソッドなどで HTML を PDF に変換できます。
C# における 'params' キーワードの一般的な使用例は何ですか?
'params' キーワードの一般的な使用例には、ロギングメッセージ、数学的操作、ストリング出力の構築など、異なる数の入力を処理する必要のあるメソッドが含まれます。
プロジェクトに PDF 操作のための C# ライブラリをどのように統合しますか?
IronPDF のような PDF 操作のための C# ライブラリを統合するには、dotnet add package [LibraryName] コマンドを使って NuGet からインストールし、その API を使用して PDF タスクを実行します。




