問題タブ [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# - IList方法() ここで T : Iclient はクライアント オブジェクトをリストに追加できません
public IList GetClientsByListofID(IList ids) ここで、T : IClient { IList クライアント = 新しい List(); client.Add(新しいクライアント(3)); }
ここでコンパイラ エラーが発生します。
「Bailey.Objects.Client」から「T」に変換できません
クライアント オブジェクトは IClient インターフェイスを実装します。ここでの私の目標は、クラス間の結合を緩めることです (DI の学習 atm)。あらゆるタイプのクライアントオブジェクトを使用でき、それが返されると言えると考えていました。
私はここで完全に基地から外れていますか?
ありがとう
ジョン・ホーキンス
.net - 非ジェネリック .NET 型でジェネリック メソッドの MethodInfo を取得する方法は?
非ジェネリック型のジェネリック メソッドの MethodInfo を取得するために、どの引数を Type.GetMethod に渡すかがわからないという小さな問題があります。具体的には、次の型定義があります。
Type.GetMethod でいくつか試してみましたが、F メソッドの MethodInfo を返すものはありませんでした。
Type.GetMethods または Type.FindMember を呼び出すことができることは承知していますが、Type.GetMethod に興味があります。
何か案は?
ありがとう。
編集
実際、私のコードはもう少し複雑です。ジェネリック メソッドはオーバーロードされているため、Type.GetMethod を関数名だけで使用することはできません。私はこれらの変種を試しました:
c# - C#:「out」変数でジェネリックメソッドを使用する方法
簡単なジェネリック関数を作りたい
使用法:
私の質問は、これらの値を設定するようにコードをどのようにプログラムするかです。コメントセクションに欠落しているコード。
助けてくれてありがとう。
c# - C#リフレクション、「new()」タイプの制約を持つメソッドでMakeGenericMethodを使用
私は次のようにMethodInfoMakeGenericMethodを使用しようとしています。
次の一般的な方法に対して:
私が抱えている問題は、渡した型が'new()'ではないため、MakeGenericMethod行で引数の例外が発生することです。
これを回避する方法はありますか?ありがとう
c# - C#はジェネリックメソッドを動的に呼び出す
次のインターフェイスが与えられます。
名前空間に次のクラスがあります
現在、私はこのIRepositoryを次のように実装しています。
これを実装するためのより良い方法はありますか?私たちのコンテキストにはデータ型(Teacher、Student)の知識がなく、そのインターフェイス(ITeacher、IStudent)だけがわかっていると仮定します。
このようなものは機能しますか?
java - null をチェックしてからオブジェクトを作成する汎用メソッドを定義する方法はありますか?
引数が null の場所をチェックし、null の場合はその型の新しいオブジェクトを返すメソッドを書きたいと思います。次のようになります。
苦労して掘り下げた後、私はまだこれを達成する方法を得ることができません.Javaで実際に可能ですか?
私は最初に反省について考えました。しかし、オブジェクトが null の場合は Class インスタンスを取得できず、型 T の名前なしで Class を作成することはできません...
アップデート:
クラスをパラメーターとして渡すことを考えましたが、次の回答が示すように、それは最善の解決策ではありません:)
私の現在の解決策は、defaultValue パラメータを使用することです。
これは、リフレクション ソリューションよりも高速で安全であり、同じ詳細です。しかし、すべてのタイプの対象に対して体系的に DEFAULT_VALUE を指定する必要があり、これは簡単な作業ではありません。
c# - RhinoMocksを使用して3つの異なるタイプのジェネリックメソッドをAssertWasCalledするにはどうすればよいですか?
Rhino Mocks AAA構文を学習しようとしていますが、特定のメソッド(任意の引数値を使用)が呼び出されたことを表明するのに問題があります。テストフレームワークとしてMachine.Specificationsを使用しています。
この特定のメソッドは一般的であり、3つの異なるタイプで3回呼び出されたことを確認したいと思います。
タイプごとに関数をスタブしました。しかし、私は興味深い結果を得ています。(下)
結果は、2つの例外と1つのパスです。
最初の呼び出しは次のようにスローします。
System.InvalidOperationException:検証する期待値が設定されていません。アクションのメソッド呼び出しが仮想(C#)/オーバーライド可能(VB.Net)メソッド呼び出しであることを確認してください
2番目のものはスローします:
System.InvalidOperationException:記録中のモックメソッド呼び出し内でのみArgを使用してください。1つの引数が必要で、2つが定義されています。
3番目のものは合格します...いくつかの奇妙な理由で。
また、セットアップでExpectでGenerateMock()を使用したり、StubでGenerateStub()を使用したりしました。どちらもまったく同じ結果になりました。私は何か間違ったことをしなければならない。
私が使用しているのは、MachineSpec0.3.0.0とRhinoMocks3.6.0.0です。
何か案は?
- - -修繕 - - - - -
これがリーの助けを借りた完全な(作業バージョン)です。追加の(非linq)レイヤーを使用しています。私の実際の問題は、私のテストの1つがオフラインの実際のコードで間違ったラムダ変数を再利用したことでした。それはShould_do_something=()=> repo.AssertWasCalled(o => repo .Save(data)); //悪いラムダ
したがって、参照用の正しいテストのサンプルを次に示します。
scala - scalaジェネリックメソッドのオーバーライド
私は抽象クラスを持っています:
複数のクラスが Foo を拡張し、メソッドをオーバーライドします
ジェネリック(または何か)を使用して、オーバーライドメソッドにそれを実装するサブクラスのパラメータタイプを持たせることは可能ですか? このような :
以下のようなことを考えていたのですが、うまくいきませんでした...
どんな助けでも大歓迎です!
ありがとうございました。
c# - リフレクションを使用して、署名付きのオブジェクト インスタンスでジェネリック メソッドを呼び出します: SomeObject.SomeGenericInstanceMethod(T引数)
どのように電話しSomeObject.SomeGenericInstanceMethod<T>(T arg)
ますか?
ジェネリック メソッドの呼び出しに関する投稿がいくつかありますが、このようなものではありません。問題は、メソッド引数パラメーターがジェネリック パラメーターに制限されていることです。
署名が代わりにあった場合、私はそれを知っています
SomeObject.SomeGenericInstanceMethod<T>(string arg)
次に、 MethodInfo を取得できました
typeof (SomeObject).GetMethod("SomeGenericInstanceMethod", new Type[]{typeof (string)}).MakeGenericMethod(typeof(GenericParameter))
では、通常の引数がジェネリック型の場合、MethodInfo を取得するにはどうすればよいでしょうか? ありがとう!
また、ジェネリック パラメーターに型の制約がある場合とない場合があります。
c# - ラムダ式の変数は、その値が与えられるとどうなりますか
次の例では、どのようindex
にしてその値を取得しますか?nはソースから自動的に取得されることは理解していますnumbers
が、意味は明らかですが、インデックスにその値がどのように与えられるかはわかりません。
の署名TakeWhile
は次のとおりです。