İngilizce dilinde oku

Aracılığıyla paylaş


Single.Equals Yöntem

Tanım

İki örneğinin Single aynı değeri temsil edip etmediğini gösteren bir değer döndürür.

Aşırı Yüklemeler

Equals(Object)

Bu örneğin, belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

Equals(Single)

Bu örneğin ve belirtilen Single nesnenin aynı değeri temsil edip etmediğini belirten bir değer döndürür.

Equals(Object)

Kaynak:
Single.cs
Kaynak:
Single.cs
Kaynak:
Single.cs

Bu örneğin, belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

public override bool Equals(object obj);
public override bool Equals(object? obj);

Parametreler

obj
Object

Bu örnekle karşılaştırılacak bir nesne.

Döndürülenler

trueörneğiyse Single ve bu örneğin değerine eşitseobj; değilse, false.

Örnekler

Aşağıdaki kod örneği yöntemini gösterir Equals .

obj1 = (Single)500;
if (a.Equals(obj1)) {
    Console.WriteLine("The value type and reference type values are equal.");
}

Açıklamalar

yöntemi Equals dikkatli kullanılmalıdır, çünkü iki değerin farklı duyarlığı nedeniyle görünüşte eşdeğer iki değer eşit olmayabilir. Aşağıdaki örnek, .3333 değerinin Single ve 1'i 3'e bölerek döndürülen değerinin Single eşit olmadığını bildirir.

// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = 1/3;
// Compare them for equality
Console.WriteLine(float1.Equals(float2));    // displays false

Önerilen tekniklerden biri, eşitlik karşılaştırması yerine iki değer arasında kabul edilebilir bir fark marjı tanımlamayı içerir (örneğin, değerlerden birinin %01'i). İki değer arasındaki farkın mutlak değeri bu kenar boşluğundan küçük veya buna eşitse, fark büyük olasılıkla duyarlık farklılıklarından kaynaklanır ve bu nedenle değerlerin eşit olması olasıdır. Aşağıdaki örnek, önceki kod örneğinin eşit olmadığını bulduğu iki Single değer olan .33333 ve 1/3 değerlerini karşılaştırmak için bu tekniği kullanır.

// Initialize two floats with apparently identical values
float float1 = .33333f;
object float2 = (float) 1/3;
// Define the tolerance for variation in their values
float difference = Math.Abs(float1 * .0001f);

// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(float1 - (float) float2) <= difference)
   Console.WriteLine("float1 and float2 are equal.");
else
   Console.WriteLine("float1 and float2 are unequal.");

Bu durumda değerler eşittir.

Not

Epsilon Aralığı sıfıra yakın olan pozitif bir değerin minimum ifadesini tanımladığından, farkın kenar boşluğu değerinden Epsilonbüyük olmalıdır. Genellikle, değerinden birçok kez daha Epsilonbüyüktür.

Kayan noktalı sayıların, belgelenen kesinliğin ötesinde duyarlığı, uygulamaya ve .NET Framework sürümüne özeldir. Sonuç olarak, belirli iki sayının karşılaştırılması, numaraları iç gösteriminin duyarlılığı değişebileceğinden .NET Framework sürümleri arasında değişebilir.

Arayanlara Notlar

Derleyici aşırı yükleme çözümlemesi, iki Equals(Object) yöntem aşırı yüklemesinin davranışında belirgin bir farka neden olabilir. bağımsız değişkeni ile Single arasında obj örtük bir dönüştürme tanımlanmışsa ve bağımsız değişken olarak Objectyazılmazsa, derleyiciler örtük bir dönüştürme gerçekleştirebilir ve yöntemini çağırabilirEquals(Single). Aksi takdirde, bağımsız değişkeni bir değer değilse obj her zaman döndüren false yöntemini çağırırlarEquals(Object).Single Aşağıdaki örnekte iki yöntem aşırı yüklemesi arasındaki davranış farkı gösterilmektedir. Visual Basic'te ve C# dışında ve dışındaki Double tüm temel sayısal türler söz konusu olduğunda, derleyici otomatik olarak bir genişletme dönüştürmesi gerçekleştirip yöntemini çağırdığı Equals(Single) için DecimalDouble ilk karşılaştırma döndürülürkentrue, derleyici yöntemini çağırdığı Equals(Object) için ikinci karşılaştırma döndürülürfalse.

using System;

public class Example
{
   static float value = 112;
   
   public static void Main()
   {
      byte byte1= 112;
      Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1));
      TestObjectForEquality(byte1);

      short short1 = 112;
      Console.WriteLine("value = short1: {0,16}", value.Equals(short1));
      TestObjectForEquality(short1);

      int int1 = 112;
      Console.WriteLine("value = int1: {0,18}", value.Equals(int1));
      TestObjectForEquality(int1);

      long long1 = 112;
      Console.WriteLine("value = long1: {0,17}", value.Equals(long1));
      TestObjectForEquality(long1);
      
      sbyte sbyte1 = 112;
      Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1));
      TestObjectForEquality(sbyte1);

      ushort ushort1 = 112;
      Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1));
      TestObjectForEquality(ushort1);

      uint uint1 = 112;
      Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1));
      TestObjectForEquality(uint1);

      ulong ulong1 = 112;
      Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1));
      TestObjectForEquality(ulong1);
      
      decimal dec1 = 112m;
      Console.WriteLine("value = dec1: {0,21}", value.Equals(dec1));
      TestObjectForEquality(dec1);

      double dbl1 = 112;
      Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1));
      TestObjectForEquality(dbl1);
   }

   private static void TestObjectForEquality(Object obj)
   {
      Console.WriteLine("{0} ({1}) = {2} ({3}): {4}\n",
                        value, value.GetType().Name,
                        obj, obj.GetType().Name,
                        value.Equals(obj));
   }
}
// The example displays the following output:
//       value = byte1:             True
//       112 (Single) = 112 (Byte): False
//
//       value = short1:             True
//       112 (Single) = 112 (Int16): False
//
//       value = int1:               True
//       112 (Single) = 112 (Int32): False
//
//       value = long1:              True
//       112 (Single) = 112 (Int64): False
//
//       value = sbyte1:             True
//       112 (Single) = 112 (SByte): False
//
//       value = ushort1:             True
//       112 (Single) = 112 (UInt16): False
//
//       value = uint1:               True
//       112 (Single) = 112 (UInt32): False
//
//       value = ulong1:              True
//       112 (Single) = 112 (UInt64): False
//
//       value = dec1:                 False
//       112 (Single) = 112 (Decimal): False
//
//       value = dbl1:                False
//       112 (Single) = 112 (Double): False

Ayrıca bkz.

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Equals(Single)

Kaynak:
Single.cs
Kaynak:
Single.cs
Kaynak:
Single.cs

Bu örneğin ve belirtilen Single nesnenin aynı değeri temsil edip etmediğini belirten bir değer döndürür.

public bool Equals(float obj);

Parametreler

obj
Single

Bu örnekle karşılaştırılacak bir nesne.

Döndürülenler

true bu örneğe eşitse; eşit değilse obj , false.

Uygulamalar

Açıklamalar

Bu API hakkında daha fazla bilgi için bkz. Single.Equals için ek API açıklamaları.

Arayanlara Notlar

Derleyici aşırı yükleme çözümlemesi, iki Equals(Object) yöntem aşırı yüklemesinin davranışında belirgin bir farka neden olabilir. bağımsız değişkeni ile Single arasında obj örtük bir dönüştürme tanımlanmışsa ve bağımsız değişken olarak Objectyazılmazsa, derleyiciler örtük bir dönüştürme gerçekleştirebilir ve yöntemini çağırabilirEquals(Single). Aksi takdirde, bağımsız değişkeni bir değer değilse obj her zaman döndüren false yöntemini çağırırlarEquals(Object).Single Aşağıdaki örnekte iki yöntem aşırı yüklemesi arasındaki davranış farkı gösterilmektedir. Visual Basic'te ve C# dışında ve dışındaki Double tüm temel sayısal türler söz konusu olduğunda, derleyici otomatik olarak bir genişletme dönüştürmesi gerçekleştirip yöntemini çağırdığı Equals(Single) için DecimalDouble ilk karşılaştırma döndürülürkentrue, derleyici yöntemini çağırdığı Equals(Object) için ikinci karşılaştırma döndürülürfalse.

using System;

public class Example
{
   static float value = 112;
   
   public static void Main()
   {
      byte byte1= 112;
      Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1));
      TestObjectForEquality(byte1);

      short short1 = 112;
      Console.WriteLine("value = short1: {0,16}", value.Equals(short1));
      TestObjectForEquality(short1);

      int int1 = 112;
      Console.WriteLine("value = int1: {0,18}", value.Equals(int1));
      TestObjectForEquality(int1);

      long long1 = 112;
      Console.WriteLine("value = long1: {0,17}", value.Equals(long1));
      TestObjectForEquality(long1);
      
      sbyte sbyte1 = 112;
      Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1));
      TestObjectForEquality(sbyte1);

      ushort ushort1 = 112;
      Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1));
      TestObjectForEquality(ushort1);

      uint uint1 = 112;
      Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1));
      TestObjectForEquality(uint1);

      ulong ulong1 = 112;
      Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1));
      TestObjectForEquality(ulong1);
      
      decimal dec1 = 112m;
      Console.WriteLine("value = dec1: {0,21}", value.Equals(dec1));
      TestObjectForEquality(dec1);

      double dbl1 = 112;
      Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1));
      TestObjectForEquality(dbl1);
   }

   private static void TestObjectForEquality(Object obj)
   {
      Console.WriteLine("{0} ({1}) = {2} ({3}): {4}\n",
                        value, value.GetType().Name,
                        obj, obj.GetType().Name,
                        value.Equals(obj));
   }
}
// The example displays the following output:
//       value = byte1:             True
//       112 (Single) = 112 (Byte): False
//
//       value = short1:             True
//       112 (Single) = 112 (Int16): False
//
//       value = int1:               True
//       112 (Single) = 112 (Int32): False
//
//       value = long1:              True
//       112 (Single) = 112 (Int64): False
//
//       value = sbyte1:             True
//       112 (Single) = 112 (SByte): False
//
//       value = ushort1:             True
//       112 (Single) = 112 (UInt16): False
//
//       value = uint1:               True
//       112 (Single) = 112 (UInt32): False
//
//       value = ulong1:              True
//       112 (Single) = 112 (UInt64): False
//
//       value = dec1:                 False
//       112 (Single) = 112 (Decimal): False
//
//       value = dbl1:                False
//       112 (Single) = 112 (Double): False

Ayrıca bkz.

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0