[解決済み] c# compare two generic values [duplicate] 2つの汎用的な値を比較する。
2023-08-11 10:50:16
質問
重複の可能性があります。
C#では演算子==は総称型に適用できないのですか?
こんな感じでコーディングしてみました。
public bool IsDataChanged()
{
T value1 = GetValue2;
T value2 = GetValue1();
return (valueInDB != valueFromView);
}
現在、この関数は " というエラーでコンパイルできません。 演算子 '!=' は 'T' 型と 'T' 型のオペランドに適用することができません。 というエラーが出ます。この関数を動作させるために何をしなければなりませんか?
どのように解決するのですか?
一般的な型の演算子は使用できません(特殊なケースである foo == null を除く)。ただし、where T : class を追加して参照型であることを示す必要があります(そうすれば foo == bar は合法になります)。
使用方法
EqualityComparer<T>
.Defaultを使用すると、あなたのためにそれを行うことができます。これは
ではなく
のみの演算子オーバーロードを提供する型では、どちらか一方だけでは動作しません。
-
インプリメント
IEquatable<T>
- object.Equals()をオーバーライドします。
一般に、==演算子を実装して、これらの少なくとも1つを実行しないことは、いずれにしても非常に悪い考えなので、これは問題になりそうもないでしょう。
public bool IsDataChanged<T>()
{
T value1 = GetValue2;
T value2 = GetValue1();
return !EqualityComparer<T>.Default.Equals(value1 , value2);
}
に制限しない場合は
IEquatable<T>
を実装していない場合、EqualityComparer のデフォルトのフォールバックは、値型と共に使用されるとボクシングを引き起こす可能性があります。
IEquatable<T>
(を実装していない値型を使用した場合、箱詰めされる可能性があります(使用する型を制御している場合は、これは問題ではないかもしれません)。私は、あなたがパフォーマンスのために =!
偶発的な
を避けることができます。
関連
-
[解決済み】C#でクエスチョンマークを2つ並べるとどんな意味になるのか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] C#で演算子==はジェネリック型に適用できない?
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】Nullable型をジェネリックパラメータにすることは可能か?
-
[解決済み】C#のジェネリック引数のNullまたはデフォルト比較
-
[解決済み】一般的な TryParse
-
[解決済み] 汎用型の値を比較するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] C#で演算子==はジェネリック型に適用できない?
-
[解決済み] IEqualityComparerでデリゲートをラップする