問題タブ [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.
c# - 型を指定しない C# ジェネリック メソッド
わかりましたので、私はC#を使い始めたJavaの男で、コーディングしてジェネリックメソッドを作成し始めました。私が書いたものは実行およびコンパイルされますが、ジェネリックがどのように機能するかについて私が知っているすべてに反するので、誰かがこれを説明できることを願っています私に:
したがって、次のように定義されたジェネリックメソッドがあります。
しかし、私にとって奇妙なことは、指定せずにこのジェネリックメソッドを呼び出すことができT
、それが機能することです:
ジェネリック型を指定せずにコードをコンパイルできるのはどうしてですか? C# は実行時に型を推測しますか?
java - Javaジェネリックメソッドの継承とオーバーライドルール
ジェネリックメソッドを持つ抽象クラスがあり、ジェネリックパラメーターを特定の型に置き換えてジェネリックメソッドをオーバーライドしたいと思います。したがって、擬似コードでは、次のようになります。
しかし、何らかの理由で私はこれを行うことを許可されていませんか?ある種の構文エラーが発生していますか、それともこの種の継承とオーバーライドは許可されていませんか?@Override
具体的には、Eclipse IDEが実装するように通知し続けるため、エラーが発生しますgetAndParse
。
上記のコードを機能させる方法は次のとおりです。私のコードのどこかに、実装するオブジェクトのインスタンスを期待するメソッドがあります。GetAndParse
これは、具体的には、getAndParse
使用できるメソッドがあることを意味します。そのインスタンスを呼び出すとgetAndParse
、コンパイラは、の特定のインスタンスを適切な方法で使用したかどうかを確認しますT
。したがって、特にT
拡張AnotherClass
する必要があり、そうする必要がありますSpecificClass
。
c# - リストにデータを入力するジェネリックメソッドはT()を作成できません
私は以下の一般的な方法を持っていますが、それがうまくいけばその目的を果たします!しかし、items.Add(new T(mo));
コンストラクターを使用しているため、パーツはコンパイルされません。誰か助けてもらえますか?
java - Javaのジェネリックメソッド
このパターンがJavaで何と呼ばれているのかよくわからないので、これにもっと良いタイトルを付ける方法がわかりません。
現在、このシグネチャを持つメソッドがあります。
そして、あなたはそれをこのように呼びます:
タイプの制約により、MyDirectory
はから派生する必要がありますDirectory
。
私が本当にやりたいのは、キャストを避け、必要なコードの量を減らすことです。C#では次のように言うことができます:
これまたはJavaで同様のことを行う方法はありますか?バージョン1.4以降、Javaをコーディングしていません。
c# - 演算子「&」は、タイプ「T」および「T」のオペランドには適用できません。
私のアプリケーションは、属性enum
を含むいくつかのを定義しています。[Flags]
これらのいずれかにフラグが設定されているかどうかを確認するための小さなユーティリティメソッドを作成したかったのでenum
、次のことを思いつきました。
しかし、これにより、「演算子'&'はタイプ'T'および'T'のオペランドに適用できません」というエラーが発生します。
これを機能させることはできますか?
java - 静的ジェネリックファクトリメソッドで「型の不一致」を回避するには?
私は愚かすぎてグーグルを使用できないか、これまで誰もこの問題に遭遇していません。
次のコードをコンパイルしようとしています。
しかし、「return _this;」という行で 「タイプの不一致: MyClass から T に変換できません」というエラーが表示されるのはなぜですか? T は MyClass を拡張するので、どこに問題があるのでしょうか? 行を「return (T)_this;」に変更すると、チェックされていないキャストに関する警告が表示されますが、警告は好きではありません;-) エラーや警告なしで目的を達成する方法はありますか?
c# - 型制限のあるジェネリック拡張メソッドを宣言するアセンブリを間接的に参照すると、奇妙なコンパイルエラーが発生します
さて、私の質問のタイトルが複雑すぎることは私には明らかです。できるだけ具体的にしようと思いました。それで、私は問題をよりよく説明しようとします。
問題のコンテキスト
ソリューションに3つの.NETプロジェクトがあると仮定します。メインプロジェクトは、単純なコンソールアプリケーションApplicationAssemblyです。このプロジェクトには、別のマネージアセンブリライブラリDirectlyReferencedLibraryへの参照があります。同時に、DirectlyReferencedLibraryはIndirectlyUsedLibraryを参照します。
したがって、プロジェクトの使用法は次のようになります。ApplicationAssembly- >DirectlyReferencedLibrary->IndirectlyUsedLibrary。
ApplicationAssemblyは、IndirectlyUsedLibraryとして宣言されたタイプを直接使用しないことに注意してください。また、これらのアセンブリで宣言されたすべてのタイプが同じ名前空間にあると仮定しましょう。
このソリューションはコンパイルされ、正常に動作します。
奇妙な問題
次の条件を一緒にすると、問題が発生します。
- ApplicationAssemblyプロジェクトには、LINQ式の使用法があります。たとえば、列挙可能なタイプのオブジェクトに対してSelect()が呼び出された場合です。
- 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メソッドの呼び出しが異なると、コンパイル時エラーが発生する場合と発生しない場合があることです。
c# - ジェネリック メソッドとオプションの引数
同様の構造を書くことは可能ですか?
どういうわけか、型 T の引数のデフォルト値を設定したい.
さらに、次のリンクを見つけました:
Generic type conversion FROM string
私が思うに、このコードは機能するはずです
c# - 汎用リストを返す
ファイルから値を読み込んだ後、一般的なリストを返そうとしています。しかし、型操作をいじった後でも、私はそれを私に同意させることができません。コードは以下のとおりです。私の質問は次のとおりです。
- 以下で始めているように、すべてのキーの種類を識別する必要がありますか、それとももっと簡単な方法がありますか? ここでは「where T: ...」が関連している可能性がありますが、可能であればDateTime、int、string、doubleなどを許可したいのですが、「where」でそれらを行う方法がわかりません。
- 日時のリストに DateTime 項目を追加できないのはなぜですか?
- タイプ(listType)を取得しようとすると、これは範囲外のようです。上記の行で使用する型を宣言しても、そのようなオブジェクトは存在しないと表示されます。
あなたの考えに感謝します
c# - ジェネリックメソッドはC#でどのようにインスタンス化されますか?
次のような汎用メソッドがあるとします。
ジェネリック メソッドの異なるインスタンス化はありますthis.Fun<Feature>
か?this.Fun<Category>
一般に、ジェネリック メソッドはどのようにインスタンス化されるのでしょうか? 異なるジェネリック引数が異なるメソッドを生成するか、実行時に使用される異なるメタデータとともに同じメソッドを生成しますか?
言語仕様からの引用で回答をサポートしてください。
また、私がこれらをしたとします:
その後、
lineX
で行ったことを元に戻しますline1
か? それとも他のものにも依存していますか?