タグ付けされた質問 「generics」

ジェネリックスは、.NET言語、Java、Swift、Rustなどのさまざまな言語に見られるパラメトリックポリモーフィズムの形式です。

5
MINおよびMAXマクロに対応するSwift
C / Objective-Cでは、MINマクロとMAXマクロを使用して、2つの数値間の最小値と最大値を見つけることができます。Swiftはマクロをサポートしておらず、言語/ベースライブラリに同等のものはないようです。一つは、おそらくこのようなジェネリックに基づいて、カスタムソリューションで行くべき1?
97 generics  swift 

4
.NETには、リストaにリストbのすべてのアイテムが含まれているかどうかを確認する方法はありますか?
私は次の方法があります: namespace ListHelper { public class ListHelper<T> { public static bool ContainsAllItems(List<T> a, List<T> b) { return b.TrueForAll(delegate(T t) { return a.Contains(t); }); } } } その目的は、リストに別のリストのすべての要素が含まれているかどうかを判断することです。このようなものがすでに.NETに組み込まれているように見えますが、それは事実であり、私は機能を複製していますか? 編集:Monoバージョン2.4.2でこのコードを使用していることを前もって述べなかったことに対する私の謝罪。
97 c#  .net  list  generics  mono 

7
.NET 2.0でList <int>をList <string>にキャストする
あなたはキャストすることができますList&lt;int&gt;にList&lt;string&gt;何とか? ループして.ToString()を実行できることはわかっていますが、キャストは素晴らしいです。 私はC#2.0を使用しています(LINQはありません)。
96 c#  generics  casting 

7
Dictionary <TKey、TValue>エントリにコレクション初期化子を使用できますか?
コードの次のビットにコレクション初期化子を使用したいと思います。 public Dictionary&lt;int, string&gt; GetNames() { Dictionary&lt;int, string&gt; names = new Dictionary&lt;int, string&gt;(); names.Add(1, "Adam"); names.Add(2, "Bart"); names.Add(3, "Charlie"); return names; } したがって、通常は次のようになります。 return new Dictionary&lt;int, string&gt; { 1, "Adam", 2, "Bart" ... しかし、これの正しい構文は何ですか?


7
C#ジェネリックのvoid?
リクエストを受け取り、レスポンスを提供する汎用メソッドがあります。 public Tres DoSomething&lt;Tres, Treq&gt;(Tres response, Treq request) {/*stuff*/} ただし、リクエストに対する応答が常に必要なわけではありません。また、応答を取得するために常にリクエストデータをフィードする必要もありません。また、マイナーな変更を行うためにメソッド全体をコピーして貼り付ける必要はありません。私が欲しいのは、これを行うことができることです: public Tre DoSomething&lt;Tres&gt;(Tres response) { return DoSomething&lt;Tres, void&gt;(response, null); } これは何らかの方法で実現可能ですか?具体的にはvoidを使用してもうまくいかないようですが、類似のものを見つけたいと思っています。
94 c#  generics 


11
要素の複数のコレクションを組み合わせるエレガントな方法?
それぞれに同じタイプのオブジェクトを含む任意の数のコレクションがあるとします(たとえば、List&lt;int&gt; fooおよびList&lt;int&gt; bar)。これらのコレクション自体がコレクション(例:タイプ)List&lt;List&lt;int&gt;&gt;である場合SelectMany、それらをすべて1つのコレクションに結合するために使用できます。 ただし、これらのコレクションがまだ同じコレクションにない場合は、次のようなメソッドを作成する必要があると思います。 public static IEnumerable&lt;T&gt; Combine&lt;T&gt;(params ICollection&lt;T&gt;[] toCombine) { return toCombine.SelectMany(x =&gt; x); } それから私はこのように呼びます: var combined = Combine(foo, bar); Combine上記のようなユーティリティメソッドを記述せずに、(任意の数の)コレクションを組み合わせる、クリーンでエレガントな方法はありますか?LINQでそれを行う方法があるべきであるほど十分に単純に思えますが、おそらくそうではありません。

10
プリミティブintのリストを作成しますか?
次のようにJavaでプリミティブintまたはプリミティブのリストを作成する方法はありますか? List&lt;int&gt; myList = new ArrayList&lt;int&gt;(); できるようです List myList = new ArrayList(); このリストに「int」を追加します。しかし、これは、このリストに何でも追加できることを意味します。 私の唯一のオプションは、intの配列を作成し、それをリストに変換するか、Integerオブジェクトのリストを作成することですか?


6
ジェネリック型が文字列かどうかをテストする最良の方法は?(C#)
プリミティブなどの任意のタイプを許可するジェネリッククラスがあります。これに関する唯一の問題は、の使用default(T)です。値型または文字列に対してdefaultを呼び出すと、それはそれを適切な値(空の文字列など)に初期化します。default(T)オブジェクトを呼び出すと、nullが返されます。さまざまな理由により、プリミティブ型でない場合は、null ではなく、その型のデフォルトのインスタンスが存在することを確認する必要があります。これが試行1です。 T createDefault() { if(typeof(T).IsValueType) { return default(T); } else { return Activator.CreateInstance&lt;T&gt;(); } } 問題-文字列は値の型ではありませんが、パラメーターのないコンストラクターがありません。したがって、現在の解決策は次のとおりです。 T createDefault() { if(typeof(T).IsValueType || typeof(T).FullName == "System.String") { return default(T); } else { return Activator.CreateInstance&lt;T&gt;(); } } しかし、これはクラッジのように感じます。文字列のケースを処理するより良い方法はありますか?
93 c#  generics 



9
タイプ「Int」を「T」に暗黙的に変換することはできません
電話Get&lt;int&gt;(Stat);またはGet&lt;string&gt;(Name); しかし、コンパイルすると、次のようになります。 タイプ「int」を「T」に暗黙的に変換することはできません と同じことstring。 public T Get&lt;T&gt;(Stats type) where T : IConvertible { if (typeof(T) == typeof(int)) { int t = Convert.ToInt16(PlayerStats[type]); return t; } if (typeof(T) == typeof(string)) { string t = PlayerStats[type].ToString(); return t; } }
92 c#  generics 

5
C#Genericsの「デフォルト」の型パラメーターへの適切なアプローチはありますか?
C ++テンプレートでは、特定の型パラメーターがデフォルトであることを指定できます。つまり、明示的に指定されていない限り、タイプTを使用します。 これはC#で実行または概算できますか? 私は次のようなものを探しています: public class MyTemplate&lt;T1, T2=string&gt; {} したがって、明示的に指定されていないタイプのインスタンスは次のようになりますT2。 MyTemplate&lt;int&gt; t = new MyTemplate&lt;int&gt;(); 本質的に: MyTemplate&lt;int, string&gt; t = new MyTemplate&lt;int, string&gt;(); 結局、かなり広く使われているテンプレートがあるのですが、typeパラメータを追加して拡張することを考えています。私はサブクラス化できると思いますが、この静脈に他のオプションがあるかどうか知りました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.