.NET ヘルプ

C# パラメータ (開発者向けの仕組み)

公開済み 2024年3月26日
共有:

C#のparamsキーワードは、メソッドが可変個の引数を受け取ることを可能にする.NETにおける強力な機能です。 これは、さまざまな数のパラメーターを必要とするメソッドを呼び出す際の構文を大幅に簡素化することができます。 この包括的なガイドでは、C# の params キーワード、その構文、使用例、およびベストプラクティスについて探ります。 この記事の後半で、以下の内容を紹介します:IronPDF以下の内容を日本語に翻訳してください:

のライブラリIron Software以下に、paramsキーワードとIronPDFを使用してPDFを生成する方法を説明します。

paramsキーワードは、C#のメソッドで可変長の引数を取るために使用されます。このキーワードを使うことで、メソッドを呼び出す際に様々な数の引数を渡すことができ、引数の数が不定の場合に便利です。

IronPDFを使用してPDFを生成するには、以下のような手順になります:

  1. まず、IronPDFをプロジェクトに追加します。NuGetパッケージマネージャを使用して、IronPDFをインストールします。
  2. 次に、IronPDF名前空間をインポートします。
  3. HTMLコンテンツや既存のPDFファイルを利用して、新しいPDFドキュメントを作成・編集します。

以下は、IronPDFを使用してHTMLからPDFを生成する簡単な例です:

using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new HtmlToPdf();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
        pdf.SaveAs("output.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new HtmlToPdf();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main()
		Dim renderer = New HtmlToPdf()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>")
		pdf.SaveAs("output.pdf")
	End Sub
End Class
VB   C#

この例では、HtmlToPdfクラスを使用して、HTML文字列からPDFを生成し、そのPDFファイルを保存しています。

paramsキーワードを例に使うと、例えば次のようになります:

using System;

class Program
{
    static void Main()
    {
        PrintMultiplePDFs("file1.pdf", "file2.pdf", "file3.pdf");
    }

    static void PrintMultiplePDFs(params string[] fileNames)
    {
        foreach (var fileName in fileNames)
        {
            Console.WriteLine($"Printing {fileName}");
        }
    }
}
using System;

class Program
{
    static void Main()
    {
        PrintMultiplePDFs("file1.pdf", "file2.pdf", "file3.pdf");
    }

    static void PrintMultiplePDFs(params string[] fileNames)
    {
        foreach (var fileName in fileNames)
        {
            Console.WriteLine($"Printing {fileName}");
        }
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		PrintMultiplePDFs("file1.pdf", "file2.pdf", "file3.pdf")
	End Sub

	Private Shared Sub PrintMultiplePDFs(ParamArray ByVal fileNames() As String)
		For Each fileName In fileNames
			Console.WriteLine($"Printing {fileName}")
		Next fileName
	End Sub
End Class
VB   C#

この例では、PrintMultiplePDFsメソッドが可変長引数(複数のファイル名)を取るためにparamsキーワードを使用しています。この方法を使用することで、任意の数のPDFファイル名をメソッドに渡すことができます。

C#のParams引数の型とは何ですか?

C#の領域では、メソッドは通常、既定の一連のパラメーターに従います。 それにもかかわらず、メソッドに渡される引数の正確な数が不明な状況が存在することがあります。 「params」キーワードを入力してください。これは、複数の引数を配列として受け取ることができるメソッドパラメータを指定するためのソリューションです。 この機能は、開発者が事前に正確な引数の数を把握していない場合に非常に価値があります。同じ型の不定またはオプションの引数をメソッド宣言内で渡すことを容易にします。

public class ParamsExample
{
    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)
{
  // ....
}
public static void AddItemsSumToShoppingBasket(params int [] sum) // params int
{
  // ....
}
public class ParamsExample
{
    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)
{
  // ....
}
public static void AddItemsSumToShoppingBasket(params int [] sum) // params int
{
  // ....
}
Public Class ParamsExample
	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)
  ' ....
End Sub
Public Shared Sub AddItemsSumToShoppingBasket(ParamArray ByVal sum() As Integer) ' params int
  ' ....
End Sub
VB   C#

"AddItemsToShoppingBasket" メソッドは、文字列パラメーターの可変数の引数で呼び出すことができます。 params オブジェクト キーワードは、配列入力を明示的に作成することなく、開発者がオプションのパラメータを直接渡すことができるため、メソッド呼び出しの構文を簡素化します。

class Program {
AddItemsToShoppingBasket("cake", "pizza", "cold drink");
AddItemsToShoppingBasket("snacks", "burger");
AddItemsToShoppingBasket(); // Valid with zero parameters default value
}
class Program {
AddItemsToShoppingBasket("cake", "pizza", "cold drink");
AddItemsToShoppingBasket("snacks", "burger");
AddItemsToShoppingBasket(); // Valid with zero parameters default value
}
Friend Class Program
AddItemsToShoppingBasket("cake", "pizza", "cold drink")
AddItemsToShoppingBasket("snacks", "burger")
AddItemsToShoppingBasket() ' Valid with zero parameters default value
End Class
VB   C#

考慮事項とベストプラクティス

パラメータリストの最後にParamsを配置する: 推奨される手法は、メソッドのパラメータリストの最後にparamsパラメータを配置することです。この手法は明確さを促進し、メソッド呼び出し時の混乱を軽減します。 明示的な値を必要とするパラメータは、効果的な整理のためにparamsの前に配置する必要があります。

非パラメータパラメータを明示的に指定する: paramsを使用するメソッドを呼び出すときは、非パラメータパラメータの値を明示的に提供するようにしてください。 この方法は曖昧さを避け、必要な数の引数でメソッドを正確に呼び出すことを保証します。

曖昧さを防ぐために注意を払う:複数のオーバーロードや同じ型のパラメータを持つメソッドでparamsを利用する際は、注意が重要です。 コンパイラは適切なメソッドを呼び出す方法を決定する際に問題が発生し、曖昧性エラーが生じる可能性があります。

代替アプローチを検討する:パラメータは便利ですが、特定のシナリオでは代替方法を検討してください。 リストなどのコレクションを利用する より高度な機能や名前付きパラメータを渡すことが目的に合致する場合には、好ましい可能性があります。

適切なシナリオに慎重に適用する: パラメーターの数が変動する可能性があるシナリオで、パラメーターを慎重に展開してください。 パラメータの数が不確定の場合にのみ使用し、パラメータ数が固定で既知の場合には使用を避けてください。

パラメータータイプのための一次元配列

AddItemsToShoppingBasket は、一次元配列を使用して呼び出すこともできます。

// example
class Program {
public static void main()
{
var items = [] {"cold drink", "snack", "roll", }; // 1D string array
AddItemsToShoppingBasket(items); // works
AddItemsToShoppingBasket( "cold drink", "coke", "roll",); // same as above line
}
}
// example
class Program {
public static void main()
{
var items = [] {"cold drink", "snack", "roll", }; // 1D string array
AddItemsToShoppingBasket(items); // works
AddItemsToShoppingBasket( "cold drink", "coke", "roll",); // same as above line
}
}
' example
Friend Class Program
Public Shared Sub main()
Dim items = () {"cold drink", "snack", "roll"} ' 1D string array
AddItemsToShoppingBasket(items) ' works
AddItemsToShoppingBasket("cold drink", "coke", "roll",) ' same as above line
End Sub
End Class
VB   C#

同じ型の引数のコンマ区切り配列を渡します。

以下のようにメソッド呼び出しで変数のリストや配列を渡すことで、AddItemsToShoppingBasketを呼び出すこともできます。

// example method signature
class Program {
AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // comma separated values
AddItemsToShoppingBasket("snacks"); 
}
// example method signature
class Program {
AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink"); // comma separated values
AddItemsToShoppingBasket("snacks"); 
}
' example method signature
Friend Class Program
AddItemsToShoppingBasket("snacks", "burger", "snacks", "burger", "cold drink") ' comma separated values
AddItemsToShoppingBasket("snacks")
End Class
VB   C#

定義された型の配列を渡す

配列はparamsメソッドで定義された同じタイプを含む必要があります。そうでない場合は、以下のようにエラーがスローされます。

// example
AddItemsToShoppingBasket("snacks",2,"burger"); // error 
AddItemsToShoppingBasket(2,3,4); // error as params type is string
// example
AddItemsToShoppingBasket("snacks",2,"burger"); // error 
AddItemsToShoppingBasket(2,3,4); // error as params type is string
' example
AddItemsToShoppingBasket("snacks",2,"burger") ' error
AddItemsToShoppingBasket(2,3,4) ' error as params type is string
VB   C#

メソッド内で定義されたパラメータとの型の不一致により、構文エラーが発生しました。

メソッドの最後のパラメーター

メソッドのパラメータ宣言内では、params パラメータの後に追加のパラメータを指定することはできず、メソッドパラメータの宣言には 1 つの params 引数のみを指定することが許可されています。

メソッドシグネチャは最後にパラメータが定義されている必要があります。その後にパラメータを追加することは許可されていません。 「そう定義すると、コンパイルエラーが発生します。」

class program {
static void Main(string [] args){
// example 1
   public static void AddItemsToShoppingBasket(double total, params string [] items)
   {
     // ....
   } // This works
}
}
example 2
static void Main(string [] args){
   public static void AddItemsToShoppingBasket(double total, int total, params string [] items)
   {
     // ....
   } // This works
}
// example 3 error scenario
static void Main(string [] args){
   public static void AddItemsToShoppingBasket(params string [] items, decimal total, int total)
   {
     // error
   } // params keyword is defined as first parameter, needs to be at the last.
}
class program {
static void Main(string [] args){
// example 1
   public static void AddItemsToShoppingBasket(double total, params string [] items)
   {
     // ....
   } // This works
}
}
example 2
static void Main(string [] args){
   public static void AddItemsToShoppingBasket(double total, int total, params string [] items)
   {
     // ....
   } // This works
}
// example 3 error scenario
static void Main(string [] args){
   public static void AddItemsToShoppingBasket(params string [] items, decimal total, int total)
   {
     // error
   } // params keyword is defined as first parameter, needs to be at the last.
}
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)
'   {
'	 ' ....
'   } ' This works
End Sub
End Class
example 2 Shared Sub Main(ByVal args() As String)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'   public static void AddItemsToShoppingBasket(double total, int total, params string [] items)
'   {
'	 ' ....
'   } ' This works
End Sub
' example 3 error scenario
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, decimal total, int total)
'   {
'	 ' error
'   } ' params keyword is defined as first parameter, needs to be at the last.
End Sub
VB   C#

唯一の params キーワード

メソッドシグネチャにおいて、params パラメータは1つしか許可されていません。 メソッドシグネチャに複数のparamsキーワードが見つかると、コンパイラはエラーをスローします。

//only one params keyword example
class Program {
static void Main(string [] args){
public static void AddItemsToShoppingBasket(params string [] items, params string [] quantity)
{
} // Compiler error, This does not work. 
}
}
//only one params keyword example
class Program {
static void Main(string [] args){
public static void AddItemsToShoppingBasket(params string [] items, params string [] quantity)
{
} // Compiler error, This does not work. 
}
}
'only one params keyword example
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, This does not work.
End Sub
End Class
VB   C#

引数を渡さないことができます。

メソッドがparamsキーワードを持つ唯一のパラメータを持っている場合、以下のように引数なしで呼び出すことができ、コンパイラはエラーをスローしません。

AddItemsToShoppingBasket(); // Works
AddItemsToShoppingBasket(); // Works
AddItemsToShoppingBasket() ' Works
VB   C#

引数にparamsが指定されているパラメーターは任意のパラメーターと見なされ、引数を渡さずに呼び出すことができます。

コード例

新しいコンソールアプリケーションを作成します。 Visual Studioを開き、新しいプロジェクトを作成して、コンソールアプリケーションの種類を選択します。

C# パラメータ(開発者向けの動作方法):図1 - 新しいコンソールアプリケーションの作成

次に、以下のコードを追加してください。

class Program {
Console.WriteLine("Params demo");
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
static void Main(string [] args) {
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);
}
}
}
class Program {
Console.WriteLine("Params demo");
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
static void Main(string [] args) {
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);
}
}
}
Friend Class Program
Console.WriteLine("Params demo")
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
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static void Main(string [] args)
'{
'Console.WriteLine("Enter the cart items as comma separated values");
'var itemsString = Console.ReadLine();
'if (itemsString != Nothing)
'{
'	var items = itemsString.Split(",").ToArray();
'	AddItemsToShoppingBasket(items);
'}
'AddItemsToShoppingBasket("Sample1", "Sample2");
'Console.WriteLine("-------------------------------------------------------");
'Console.WriteLine("Display Cart");
'foreach (var item in cart)
'{
'	Console.WriteLine(item);
'}
'}
End Class
VB   C#

出力

C# パラメータ (開発者向けの仕組み): 図 2 - 上記コードの出力

IronPDFの紹介

IronPDFは、Iron Softwareから提供されているC#用のPDFライブラリで、C#でPDFドキュメントの読み取り、書き込み、管理ができる多用途なライブラリです。 それは、モバイル、ウェブサイト、デスクトップ、Dockerなどのあらゆる種類の最新のアプリケーション開発をサポートします。また、Windows、Linux、UnixなどのさまざまなOSもサポートします。ネイティブOSのメソッドには依存しません。

インストール

IronPDFライブラリは、次の方法でインストールできますNuGet(ニューゲット)以下のコマンドを使用して、またはVisual Studioのパッケージマネージャーを使用して、パッケージマネージャーコンソールを実行します。

dotnet add package IronPdf
dotnet add package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf
VB   C#

IronPDFを使用してPDFを生成する

以下の例からPDFドキュメントを生成するために、IronPDFを使用します。

class program
{
public static void main()
{
Console.WriteLine("IronPDF to generate the PDF document for Params Example");
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 seperated 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");
}
}
class program
{
public static void main()
{
Console.WriteLine("IronPDF to generate the PDF document for Params Example");
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 seperated 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

Friend Class program
Public Shared Sub main()
Console.WriteLine("IronPDF to generate the PDF document for Params Example")
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 seperated 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
VB   C#

上記のコードでは、カート内の商品アイテムのHTMLドキュメントを生成し、それをPDFドキュメントとして保存しています。IronPDF.

出力

C# パラメーター (開発者向けの仕組み): 図3 - 上記のコードからのPDF出力

ライセンス(無料トライアル利用可能)

IronPDFは、本番環境で動作するためにライセンスキーが必要です。 試用キーはライセンスページから取得できますこれ. キーをappsettings.jsonに配置します。

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
VB   C#

試用ライセンスをメールで受け取るために、メールIDを提供してください。

結論

C#のparamsキーワードを使用すると、.NET 8では、可変数のパラメーターを必要とするメソッドを柔軟に処理する方法が提供されます。 それはメソッド呼び出しを簡素化し、コードをより読みやすく、保守しやすくします。 一緒にIronPDF、それは、すべてのプログラマーにとってクリーンなコードを書くための優れたスキルの組み合わせです。

< 以前
C# PostgreSQL(開発者にとっての仕組み)
次へ >
C# 列挙型 (開発者向けの仕組み)