c#の2つの値が等しいかどうかを確認するにはどうすればよいですか? (任意のタイプの値を指定)
質問
このコードはここにありますが、これはあらゆるタイプの引数を許可することを目的としています:
public static void AreEqual(object expectedValue, object actualValue) {
if (expectedValue == actualValue) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
}
2、3のintを使用して呼び出した場合、あまりうまく動作しません。
AreEqual(3, 3) // prints Not Equal
解決
最も簡単なレベル:
public static void AreEqual(object expectedValue, object actualValue) {
if (object.Equals(expectedValue,actualValue)) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
}
またはジェネリック(IEquatable<T>
をサポート):
public static void AreEqual<T>(T expectedValue, T actualValue) {
if (EqualityComparer<T>.Default.Equals(expectedValue,actualValue)) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
}
他のヒント
<!> quot; strange <!> quot;の理由を強調するだけです。動作は、オブジェクトにintをキャストすると、ボクシングが発生するためです。 2つの3はオブジェクトに変換され、その後、数値を比較しなくなり、参照を比較します。これは同じではありません。
2つのオブジェクトの値が等しいかどうかを確認するには、次を使用します。
if (Object.Equals(expectedValue, actualValue)) {
通常の==演算子は、object
が参照型であると想定しています(値型もオブジェクトから派生しているという事実にもかかわらず)。
試してください:
if (expectedValue.Equals(actualValue))
そしてもちろんnull
を処理する必要があるので、これを試してください:
Boolean eq = false;
if (expectedValue == null || actualValue == null)
eq = (expectedValue == actualValue);
else
eq = expectedValue.Equals(actualValue);
if (eq) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
これは、もちろん @mike nelson の回答と同じです:
if (Object.Equals(expectedValue, actualValue))
だから彼の答えに賛成票を投じてください。
if (expectedValue != null)
{
if (expectedValue.Equals(actualValue))
{
// enter code here
}
}
所属していません StackOverflow