問題タブ [generic-method]

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 投票する
2 に答える
13767 参照

c# - 型を指定しない C# ジェネリック メソッド

わかりましたので、私はC#を使い始めたJavaの男で、コーディングしてジェネリックメソッドを作成し始めました。私が書いたものは実行およびコンパイルされますが、ジェネリックがどのように機能するかについて私が知っているすべてに反するので、誰かがこれを説明できることを願っています私に:

したがって、次のように定義されたジェネリックメソッドがあります。

しかし、私にとって奇妙なことは、指定せずにこのジェネリックメソッドを呼び出すことができT、それが機能することです:

ジェネリック型を指定せずにコードをコンパイルできるのはどうしてですか? C# は実行時に型を推測しますか?

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

java - Javaジェネリックメソッドの継承とオーバーライドルール

ジェネリックメソッドを持つ抽象クラスがあり、ジェネリックパラメーターを特定の型に置き換えてジェネリックメソッドをオーバーライドしたいと思います。したがって、擬似コードでは、次のようになります。

しかし、何らかの理由で私はこれを行うことを許可されていませんか?ある種の構文エラーが発生していますか、それともこの種の継承とオーバーライドは許可されていませんか?@Override具体的には、Eclipse IDEが実装するように通知し続けるため、エラーが発生しますgetAndParse

上記のコードを機能させる方法は次のとおりです。私のコードのどこかに、実装するオブジェクトのインスタンスを期待するメソッドがあります。GetAndParseこれは、具体的には、getAndParse使用できるメソッドがあることを意味します。そのインスタンスを呼び出すとgetAndParse、コンパイラは、の特定のインスタンスを適切な方法で使用したかどうかを確認しますT。したがって、特にT拡張AnotherClassする必要があり、そうする必要がありますSpecificClass

0 投票する
1 に答える
346 参照

c# - リストにデータを入力するジェネリックメソッドはT()を作成できません

私は以下の一般的な方法を持っていますが、それがうまくいけばその目的を果たします!しかし、items.Add(new T(mo));コンストラクターを使用しているため、パーツはコンパイルされません。誰か助けてもらえますか?

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

java - Javaのジェネリックメソッド

このパターンがJavaで何と呼ばれているのかよくわからないので、これにもっと良いタイトルを付ける方法がわかりません。

現在、このシグネチャを持つメソッドがあります。

そして、あなたはそれをこのように呼びます:

タイプの制約により、MyDirectoryはから派生する必要がありますDirectory

私が本当にやりたいのは、キャストを避け、必要なコードの量を減らすことです。C#では次のように言うことができます:

これまたはJavaで同様のことを行う方法はありますか?バージョン1.4以降、Javaをコーディングしていません。

0 投票する
5 に答える
4484 参照

c# - 演算子「&」は、タイプ「T」および「T」のオペランドには適用できません。

私のアプリケーションは、属性enumを含むいくつかのを定義しています。[Flags]

これらのいずれかにフラグが設定されているかどうかを確認するための小さなユーティリティメソッドを作成したかったのでenum、次のことを思いつきました。

しかし、これにより、「演算子'&'はタイプ'T'および'T'のオペランドに適用できません」というエラーが発生します。

これを機能させることはできますか?

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

java - 静的ジェネリックファクトリメソッドで「型の不一致」を回避するには?

私は愚かすぎてグーグルを使用できないか、これまで誰もこの問題に遭遇していません。

次のコードをコンパイルしようとしています。

しかし、「return _this;」という行で 「タイプの不一致: MyClass から T に変換できません」というエラーが表示されるのはなぜですか? T は MyClass を拡張するので、どこに問題があるのでしょうか? 行を「return (T)_this;」に変更すると、チェックされていないキャストに関する警告が表示されますが、警告は好きではありません;-) エラーや警告なしで目的を達成する方法はありますか?

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

c# - 型制限のあるジェネリック拡張メソッドを宣言するアセンブリを間接的に参照すると、奇妙なコンパイルエラーが発生します

さて、私の質問のタイトルが複雑すぎることは私には明らかです。できるだけ具体的にしようと思いました。それで、私は問題をよりよく説明しようとします。

問題のコンテキスト

ソリューションに3つの.NETプロジェクトがあると仮定します。メインプロジェクトは、単純なコンソールアプリケーションApplicationAssemblyです。このプロジェクトには、別のマネージアセンブリライブラリDirectlyReferencedLibraryへの参照があります。同時に、DirectlyReferencedLibraryはIndirectlyUsedLibraryを参照します。

したがって、プロジェクトの使用法は次のようになります。ApplicationAssembly- >DirectlyReferencedLibrary->IndirectlyUsedLibrary

ApplicationAssemblyは、IndirectlyUsedLibraryとして宣言されたタイプを直接使用しないことに注意してください。また、これらのアセンブリで宣言されたすべてのタイプが同じ名前空間にあると仮定しましょう。

このソリューションはコンパイルされ、正常に動作します。

奇妙な問題

次の条件を一緒にすると、問題が発生します。

  1. ApplicationAssemblyプロジェクトには、LINQ式の使用法があります。たとえば、列挙可能なタイプのオブジェクトに対してSelect()が呼び出された場合です。
  2. DirectlyReferencedLibraryは、型制限のあるジェネリック拡張メソッドを持つクラスを宣言します。型の制限により、ジェネリック型はIndirectlyUsedLibraryのクラスの子孫である必要があります。

このようなクラスの例を次に示します。

このプロジェクトをコンパイルしようとすると、次のエラーが発生します。

エラータイプ'Test.ProblemType'は、参照されていないアセンブリで定義されています。アセンブリ'IndirectlyUsedLibrary、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null'への参照を追加する必要があります。C:\ Projects \ Test \ ApplicationAssembly \ Program.cs 22 13 ApplicationAssembly

質問

なぜそうなのか、誰かが私に理解するのを手伝ってもらえますか?

PS

私は調査のための小さな解決策を作りました。あなたが私を助けてくれてとても親切なら、あなたはここでアーカイブされた解決策を取ることができるでしょう

PPS

英語が下手でごめんなさい。

UPD1

もう1つの奇妙なことは、LINQメソッドの呼び出しが異なると、コンパイル時エラーが発生する場合と発生しない場合があることです。

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

c# - ジェネリック メソッドとオプションの引数

同様の構造を書くことは可能ですか?
どういうわけか、型 T の引数のデフォルト値を設定したい.

さらに、次のリンクを見つけました: Generic type conversion FROM string
私が思うに、このコードは機能するはずです

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

c# - 汎用リストを返す

ファイルから値を読み込んだ後、一般的なリストを返そうとしています。しかし、型操作をいじった後でも、私はそれを私に同意させることができません。コードは以下のとおりです。私の質問は次のとおりです。

  1. 以下で始めているように、すべてのキーの種類を識別する必要がありますか、それとももっと簡単な方法がありますか? ここでは「where T: ...」が関連している可能性がありますが、可能であればDateTime、int、string、doubleなどを許可したいのですが、「where」でそれらを行う方法がわかりません。
  2. 日時のリストに DateTime 項目を追加できないのはなぜですか?
  3. タイプ(listType)を取得しようとすると、これは範囲外のようです。上記の行で使用する型を宣言しても、そのようなオブジェクトは存在しないと表示されます。

あなたの考えに感謝します

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

c# - ジェネリックメソッドはC#でどのようにインスタンス化されますか?

次のような汎用メソッドがあるとします。

ジェネリック メソッドの異なるインスタンス化はありますthis.Fun<Feature>か?this.Fun<Category>

一般に、ジェネリック メソッドはどのようにインスタンス化されるのでしょうか? 異なるジェネリック引数が異なるメソッドを生成するか、実行時に使用される異なるメタデータとともに同じメソッドを生成しますか?

言語仕様からの引用で回答をサポートしてください。

また、私がこれらをしたとします:

その後、

lineXで行ったことを元に戻しますline1か? それとも他のものにも依存していますか?