問題タブ [generic-constraints]

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

c# - T を Enum に制約するジェネリック メソッドを作成する

Enum.Parseという概念を拡張する機能を構築しています

  • Enum 値が見つからない場合にデフォルト値を解析できるようにします
  • 大文字と小文字を区別しない

だから私は次のように書いた:

エラー Constraint cannot be special class が発生していますSystem.Enum

十分に公平ですが、ジェネリック列挙型を許可する回避策はありますか、それともParse関数を模倣して型を属性として渡す必要がありますか?これにより、醜いボクシング要件がコードに強制されます。

編集以下のすべての提案は大歓迎です、ありがとう。

解決しました(大文字と小文字を区別しないようにループを残しました-XMLを解析するときにこれを使用しています)

編集: (2015 年 2 月 16 日) Christopher Currens は、以下の MSIL または F# でコンパイラを強制するタイプ セーフなジェネリック ソリューションを投稿しました。解決策がページのさらに上にある場合は、この編集を削除します。

編集2:(2021年4月13日)C#7.3以降、これに対処し、サポートされているため、受け入れられた回答を変更しましたが、上位の回答を完全に熟読することは、学術的および歴史的関心のために価値があります:)

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

c# - 値型制約のある一般的な宣言型間でコピーする方法

値型間で値をコピーするジェネリックメソッドがあります。次のアプローチでは、構造体の制約がある場合でも、設計時のエラーが発生します。値の間でコピーまたはキャストする方法はありますか?

0 投票する
8 に答える
94503 参照

c# - C#にパラメーター制約のあるジェネリックコンストラクターはありますか?

C#では、次のようなジェネリックメソッドに制約を課すことができます。

これを指定するT場合、パラメーターを必要としないコンストラクターが必要です。「パラメーターを持つコンストラクターが存在するfloat[,]」のような制約を追加する方法があるかどうか疑問に思っています。

次のコードはコンパイルされません。

回避策も役立ちますか?

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

c# - ジェネリック制約: 型に静的関数とパラメーターを持つコンストラクターを強制する

私はあなたが書くことができることを知っています:

T空のコンストラクターを持つことを強制します。

私のQは:

  1. T特定のタイプのパラメーターを持つコンストラクターを持つことを強制できますか? お気に入り:

    /li>
  2. ジェネリッククラス内でこの関数を使用できるようTに、静的関数(たとえば、 )を強制できますか?void F()お気に入り :

    インターフェイスを実装するように指定できることは知ってTいますが、私はそれを望んでいません。T静的機能があることを指定したい。

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

.net - 一般的な制約の列挙

Enums (Enumerations) の拡張メソッドを構築しました - 、名前を付けて、言うGetEnumSecondName

これで、列挙型を取り、その型のすべての 2 番目の名前を返すジェネリック メソッドができました。

それを行うための回避策はありますか?

編集:

私が理解したように (Jon Skeet のおかげで)、C# は薄い種類の制約をサポートしていません。「通常の」VB.NETもそれをサポートしていないことを確認するVB.NETの専門家がいる場合。ありがとう。

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

generics - F#:一見動的な型を作成するのに役立つメンバー制約

F# メソッドにダック タイピングを追加する方法を検討しています。

入ってくるパラメーターに Test メソッドがある場所。私はこのような表記を見てきました:

クラス/インターフェースレベルではなく、メソッドレベルでジェネリック制約を使用できるように思えます。問題は、型の問題によりコンパイルできないことです。これは、メソッド レベルで制約を指定する方法がないと私に信じさせます。それは正確ですか?

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

c# - このC#ジェネリッククラスを理解するための助けが必要

私はNhibernate3.0を学んでいます。サンプルコード例の1つでは、抽象基本エンティティクラスを作成します。

次に、CustomerエンティティをEntity基本クラスから継承させます。

私はそれが抽象ジェネリッククラスであることを理解しています、そしてそれはタイプが でwhereあることを確認するためにキーワードを使用しています、これは私が混乱するところです。TEntity<T>

Customer「」から継承しますがEntity<Customer>、この「Entity<Customer>」は「Customer」をとして取りますTが、これCustomerは「」ではありませんEntity<T>

これを理解するのを手伝ってください、私はこのジェネリッククラスに本当に混乱しています。

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

c# - C#ジェネリック制約のワイルドカード

C#には汎用ワイルドカードがなく、汎用メソッドでも同様の効果が得られることは承知していますが、フィールドでワイルドカードを使用する必要があり、それをエンコードする方法があるかどうかを判断できません。

もちろん、追加されるオブジェクトはタイプではなく、タイプState<Thing>であるため、これは機能しませんState<T> where T : Thing。リストの最も内部的なタイプを、? extends Thing単なるJavaではなくJavaと同等になるように調整することは可能Thingですか?

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

c# - 一般的な制約 -- どちらかまたは両方のケースでこの状況を修正する方法がわかりません

基本的に私は以下を持っています:

問題は、制約が異なっていても、同じ署名を持つメンバーを持つことができないため、これを行うことができないことです。ただし、制約がIComparableORのいずれかであると述べる方法はありませんIComparable<T>。ですから、1つを選んでそれを使う以外に、ここで何をすべきかわかりません. そして、どちらを選んだとしても、それらは別のものであり、互いに継承していないため、もう一方を失うことになります (これは理にかなっています)。

両方を使用して達成する方法があるという点で、ここで何かが欠けていますか、それともどちらかを選択する必要がありますか (おそらく汎用バージョン)?