Číst v angličtině

Sdílet prostřednictvím


Single.Equals Metoda

Definice

Důležité

Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Vrátí hodnotu označující, zda dvě instance Single představují stejnou hodnotu.

Přetížení

Equals(Object)

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

Equals(Single)

Vrátí hodnotu označující, zda tato instance a zadaný Single objekt představují stejnou hodnotu.

Equals(Object)

Zdroj:
Single.cs
Zdroj:
Single.cs
Zdroj:
Single.cs

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

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

Parametry

obj
Object

Objekt k porovnání s touto instancí.

Návraty

true pokud obj je instancí Single instance a rovná se hodnotě této instance, v opačném případě false.

Příklady

Následující příklad kódu ukazuje metodu Equals .

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

Poznámky

Metoda Equals by měla být používána s opatrností, protože dvě zdánlivě ekvivalentní hodnoty mohou být nerovné kvůli rozdílné přesnosti těchto dvou hodnot. Následující příklad hlásí, že Single hodnota .3333 a Single vrácená vydělením 1 3 jsou nerovné.

// 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

Jedna doporučená technika místo porovnávání rovnosti zahrnuje definování přijatelného rozdílu mezi dvěma hodnotami (například 0,01 % jedné z hodnot). Pokud je absolutní hodnota rozdílu mezi těmito dvěma hodnotami menší nebo rovna okraji, je pravděpodobné, že rozdíl bude způsoben rozdíly v přesnosti, a proto jsou tyto hodnoty pravděpodobně stejné. Následující příklad používá tuto techniku k porovnání .33333 a 1/3, dvou Single hodnot, které předchozí příklad kódu zjistil, že jsou nerovné.

// 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.");

V tomto případě jsou hodnoty stejné.

Poznámka

Vzhledem k tomu Epsilon , že definuje minimální výraz kladné hodnoty, jejíž rozsah se blíží nule, musí být rozdíl větší než Epsilon. Obvykle je mnohonásobně větší než Epsilon.

Přesnost čísel s pohyblivou řádovou čárkou nad rámec dokumentované přesnosti závisí na konkrétní implementaci a verze platformy .NET Framework. Porovnání dvou konkrétních čísel se může následně změnit mezi jednotlivými verzemi platformy .NET Framework, protože může dojít ke změně přesnosti interní reprezentace čísel.

Poznámky pro volající

Překlad přetížení kompilátoru může způsobit zjevný rozdíl v chování dvou Equals(Object) přetížení metody. Pokud je definován implicitní převod mezi argumentem obj a Single a argument není zadán jako Object, kompilátory mohou provést implicitní převod a volat metodu Equals(Single) . V opačném případě volají metodu Equals(Object) , která vždy vrátí false , pokud její obj argument není Single hodnota. Následující příklad znázorňuje rozdíl v chování mezi přetíženími dvou metod. V případě všech primitivních číselných typů s výjimkou Double v jazyce Visual Basic a s výjimkou Decimal a Double v jazyce C# vrátí true první porovnání, protože kompilátor automaticky provede rozšiřující převod a zavolá metodu Equals(Single) , zatímco druhé porovnání vrátí false , protože kompilátor volá metodu Equals(Object) .

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

Viz také

Platí pro

.NET 10 a další verze
Produkt Verze
.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)

Zdroj:
Single.cs
Zdroj:
Single.cs
Zdroj:
Single.cs

Vrátí hodnotu označující, zda tato instance a zadaný Single objekt představují stejnou hodnotu.

public bool Equals(float obj);

Parametry

obj
Single

Objekt k porovnání s touto instancí.

Návraty

truepokud obj je rovna této instanci, v opačném případě . false

Implementuje

Poznámky

Další informace o tomto rozhraní API najdete v tématu Doplňkové poznámky k rozhraní API pro Single.Equals.

Poznámky pro volající

Překlad přetížení kompilátoru může způsobit zjevný rozdíl v chování dvou Equals(Object) přetížení metody. Pokud je definován implicitní převod mezi argumentem obj a Single a argument není zadán jako Object, kompilátory mohou provést implicitní převod a volat metodu Equals(Single) . V opačném případě volají metodu Equals(Object) , která vždy vrátí false , pokud její obj argument není Single hodnota. Následující příklad znázorňuje rozdíl v chování mezi přetíženími dvou metod. V případě všech primitivních číselných typů s výjimkou Double v jazyce Visual Basic a s výjimkou Decimal a Double v jazyce C# vrátí true první porovnání, protože kompilátor automaticky provede rozšiřující převod a zavolá metodu Equals(Single) , zatímco druhé porovnání vrátí false , protože kompilátor volá metodu Equals(Object) .

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

Viz také

Platí pro

.NET 10 a další verze
Produkt Verze
.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