1. ホーム
  2. c#

[解決済み] コンストラクタ拡張メソッドを作成することはできますか?

2023-06-01 10:21:17

質問

コンストラクタの拡張メソッドを追加することは可能でしょうか?

サンプル使用例

与えられた部分的に満たされたバッファから特定の量のバイトを受け取るための List< T > コンストラクタを追加したい(関連するバイトのみをコピーするなどのオーバーヘッドなしで)。

...
public static List<T>(this List<T> l, T[] a, int n)
{
    for (int i = 0; i < n; i++)
       l.Add(a[i]);
}
...

というように、使い方は

List<byte> some_list = new List<byte>(my_byte_array,number_of_bytes);

すでにAddRange拡張メソッドを追加しています。

public static void AddRange<T>(this List<T> l, T[] a, int n)
{
   for (int i = 0; i < n; i++)
       l.Add(a[i]);
}

私もコンストラクタとしてやりたいのです。それは可能ですか?もし可能であれば、どのようにすればよいですか?

どのように解決するのですか?

いいえ、しかし、もしあなたが AddRange のシグネチャを変更してリストのインスタンスを返すようにすれば、少なくとも

var list = new List<int>().AddRange(array, n);

というのは、おそらくコンストラクタをオーバーロードするよりも明確なことです。