問題タブ [generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
15941 参照

c# - C#がクラスコンストラクターで暗黙のジェネリック型をサポートしないのはなぜですか?

C#では、コンパイラーがジェネリック型パラメーターを推測できる場合は、ジェネリック型パラメーターを指定する必要はありません。たとえば、次のようになります。

'aこれは、型パラメーターがコンパイラーによって追加されるため、型パラメーターが何であるかがわからない(インテリセンスではとして表示される)匿名型に必要です。

クラスレベルの型パラメータでは、これを行うことはできません。

C#がこのクラスレベルのジェネリック型推論をサポートしないのはなぜですか?

0 投票する
2 に答える
9702 参照

c# - C#でジェネリック型に複数の制約を指定するにはどうすればよいですか?

複数のタイプに制約を設定するための構文は何ですか?基本的な例:

次の定義では、両方のタイプに制約を設定して、から継承する必要がありSpeciesType、から継承する必要があるようにします。SpeciesOrderTypeOrder

0 投票する
31 に答える
704602 参照

c# - リストから重複を削除するC#で

誰もがC#でジェネリックリストを重複排除するための簡単な方法を持っていますか?

0 投票する
2 に答える
4754 参照

generics - MultiMap in Scala

I'm trying to mixin the MultiMap trait with a HashMap like so:

The definition for the MultiMap trait is:

Meaning that a MultiMap of types A & B is a Map of types A & Set[B], or so it seems to me. However, the compiler complains:

It seems that generics are tripping me up again.

0 投票する
6 に答える
556 参照

language-agnostic - ジェネリックスを実装する言語はありますか?

私はDifferencesinGenericsでの議論が好きで、この機能を特にうまく使用している言語があるかどうか疑問に思いました。

私は、リスコフの置換可能であるもののList<? extends Foo>Javaが本当に嫌いです。なぜそれをカバーできないのですか?ListFooList<Foo>

そして正直なところ、Comparable<? super Bar>

また、ジェネリックスの配列を決して返さない理由を一生思い出せません。

私はC++のテンプレートが好きではありませんでしたが、それは主に、リモートで意味のあるエラーメッセージを出力するコンパイラがなかったためです。ある時、私は実際にmake realclean && make何かをコンパイルするために17回実行しました。なぜ17回目が魅力だったのか、私にはわかりませんでした。

では、ペットの言語でジェネリックを使用するのが実際に好きなのは誰ですか?

0 投票する
4 に答える
39802 参照

java - Java Generics: Object o のクラスとの比較

次のクラスがあるとしましょう:

oと同じクラスであることを確認するにはどうすればよいEですか?

(Object o)スーパークラスをオーバーライドしているため、メソッドのシグネチャを変更できないため、メソッドのシグネチャを選択できません。

また、キャストを試みて、失敗した場合に結果の例外をキャッチするという道をたどりたくありません。

0 投票する
3 に答える
1185 参照

c# - 汎用オブジェクトの非汎用メンバーへのアクセス

共通のスーパー クラスを共有しない複数の「ジェネリック」オブジェクトを (たとえば、リストで) 収集する方法はありますか? もしそうなら、どうすれば共通のプロパティにアクセスできますか?

例えば:

明らかに、これは疑似コードであり、機能しません。

また、.Value プロパティにアクセスする必要もありません (タイプ セーフではないため)。

編集:これについて考えてきたので、これにサブクラスを使用することが可能です。ただし、それは、新しい型ごとに新しいサブクラスを作成する必要があることを意味すると思います。


@ Grzenio はい、それはまさに私の質問に答えました。もちろん、共有インターフェイス全体を複製する必要がありますが、それは大きな問題ではありません。そう思ったはずなのに…

@akuアヒル のタイピングについてはあなたが正しいです。完全にランダムな 2 種類のオブジェクトにアクセスできるとは思いません。

しかし、汎用オブジェクトは、パラメータ化された型を除いてまったく同じであるため、ある種の共通インターフェースを共有すると思いました。どうやら、これは自動的には当てはまりません。

0 投票する
9 に答える
132701 参照

c# - Console.WriteLine とジェネリック リスト

次のようなコードを書いていることがよくあります。

より良いのは次のようなものです:

これを行うための巧妙な方法があると思いますが、わかりません。最初のブロックよりも優れた解決策はありますか?

0 投票する
3 に答える
5521 参照

asp.net - ObjectDataSource でジェネリック クラスを使用する

ObjectDataSource で使用したい汎用の Repository<T> クラスがあります。Repository<T> は、DataAccess という別のプロジェクトにあります。MS ニュースグループのこの投稿によると(関連部分を以下にコピー):

内部的に、ObjectDataSource は Type.GetType(string) を呼び出して型を取得しているため、ジェネリックを使用して型を取得する方法については、Type.GetType に記載されているガイドラインに従う必要があります。Type.GetType で MSDN ライブラリを参照できます。

http://msdn2.microsoft.com/en-us/library/w3f99sx1.aspx

このドキュメントから、ジェネリックを使用している型名を示すためにバッククォート (`) を使用する必要があることがわかります。

また、ここでは型名文字列でアセンブリ名を指定する必要があります。

したがって、あなたの質問に対する答えは、次のような型名を使用することです。

TypeName="TestObjectDataSourceAssembly.MyDataHandler`1[System.String],TestObjectDataSourceAssembly"

わかりました。ただし、試してみると、ページで例外がスローされます。

[InvalidOperationException: ObjectDataSource 'MyDataSource' の TypeName プロパティで指定された型が見つかりませんでした。]

興味深いことに、これはページを表示しているときにのみ発生します。VS2008 デザイナーから [データ ソースの構成] ダイアログを開くと、汎用リポジトリ クラスのメソッドが適切に表示されます。デバッグ中に TypeName 文字列を Type.GetType() に渡すと、有効な型も返されます。それで、何が得られますか?

0 投票する
7 に答える
304 参照

c# - ジェネリック クラスから継承するときに T のリストまたは列挙子で必要な提案

私は答えが単純ではないことを知っています.そして、私はすでにいくつかの(私は醜いと思います)クラッジを使用しています. 私は単にいくつかのエレガントな答えを探しています。

抽象クラス:

子供:

この時点で T の型が具体的にわからないため、MyObjects (または他の同様のグループ化、ジェネリックまたはその他) のコレクションをループして、 MyObjects基本クラスのToListメソッドを利用することは可能ですか?

編集 具体的な例については、これが発生するたびに、しばらく考えて、代わりに別のことをしたので、現在の要件はありません。でもかなり頻繁に出てくるので、浮かせてみようと思いました。

EDIT @Sara、それは私が気にかけているコレクションの特定のタイプではなく、リストである可能性がありますが、それでも各インスタンスの ToList メソッドは匿名タイプなしでは比較的使用できません)

@aku、本当です。この質問は比較的仮説的なものかもしれませんが、T 個のオブジェクトのリストを取得して操作でき、それらの基本型のみを知っていれば非常に便利です。ToList が BaseType のリストを返すようにすることは、私の回避策の 1 つです。

編集@すべて:これまでのところ、これは私が望んでいた種類の議論でしたが、それは私が疑っていたことをほぼ確認しています. これまでありがとうございましたが、それ以外の方はお気軽に入力してください。

EDIT @Rob、はい、定義されたタイプに対して機能しますが、タイプが IOtherObjects のリストとしてのみ知られている場合は機能しません。

@ロブ再びありがとう。それは通常、私の不器用な回避策でした(無礼ではありません:))。それか、ConvertAll 関数を使用してデリゲートを介してダウンキャストします。問題を理解するために時間を割いていただきありがとうございます。

少し混乱した場合の修飾編集

より正確に言えば、(これの最新の実装を複雑にしすぎた可能性があります):

オブジェクト A から継承した B と C の 2 つのオブジェクト タイプがあるとします。

多くのシナリオが、B のリストまたは C のリスト、またはその他の場合はいずれかのリストから、どこにあるかを示してきましたが、基本クラスにいる場合、あまり具体的でないリストが必要かどうかはわかりません。 A.

上記の例は、List Of Less Specific問題の最新の化身の骨抜きにされた例です。

書く必要のあるコードの量を制限し、他のオプションよりも少し洗練されていると思われるシナリオを考えてみると、通常はそれ自体が提示されています。多かれ少なかれ得た可能性やその他の視点についての議論が本当に欲しかった. ConvertAll() は私が使用した別の回避策であるため、これまで誰も言及していないことに驚いていますが、手元のシナリオには少し冗長すぎます

@ロブ・イェット・アゲインとサラ

ありがとう、しかし、私はすべての静的コンテキストの栄光でジェネリックを理解していると感じており、ここで発生している問題を理解していました.

私たちのシステムの実際の設計とそのジェネリックスの使用法 (私は設計の当事者の 1 人に過ぎなかったので、これは偏見を含まずに言えます) はうまくいきました。それは、私がコア API を扱っているときです。単純に何かを行うのに間違った範囲にいる状況を見つけました。代わりに、好きなよりも少しエレガントではない方法でそれらに対処しなければなりませんでした (いずれかを賢くしようとしました)。またはおそらく怠け者-私はそれらのラベルのいずれかを受け入れます)。

私がクラッジと呼んだものに対する私の嫌悪感は、主に、オブジェクトをベース値に変換するためだけにレコード セットをループする必要があることです。これはパフォーマンス ヒットになる可能性があります。

他の誰かが以前にコーディングでこれに遭遇したかどうか、そして誰かが私よりも賢く、または少なくともエレガントに対処したかどうか疑問に思っていたと思います。