Leggere in inglese

Condividi tramite


Single.Equals Metodo

Definizione

Restituisce un valore che indica se due istanze di Single rappresentano lo stesso valore.

Overload

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

Equals(Single)

Restituisce un valore che indica se l'istanza e un oggetto Single specificato rappresentano lo stesso valore.

Equals(Object)

Origine:
Single.cs
Origine:
Single.cs
Origine:
Single.cs

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

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

Parametri

obj
Object

Oggetto da confrontare con l'istanza.

Restituisce

true se obj è un'istanza di Single ed è uguale al valore dell'istanza; in caso contrario, false.

Esempio

Nell'esempio di codice seguente viene illustrato il Equals metodo .

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

Commenti

Il Equals metodo deve essere usato con cautela, perché due valori apparentemente equivalenti possono essere diversi a causa della precisione diversa dei due valori. Nell'esempio seguente viene segnalato che il Single valore .3333 e l'oggetto Single restituito dividendo 1 per 3 non sono uguali.

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

Invece di confrontare l'uguaglianza, una tecnica consigliata prevede la definizione di un margine di differenza accettabile tra due valori, ad esempio ,01% di uno dei valori. Se il valore assoluto della differenza tra i due valori è minore o uguale a tale margine, è probabile che la differenza sia dovuta a differenze di precisione e, pertanto, i valori saranno uguali. Nell'esempio seguente viene usata questa tecnica per confrontare .33333 e 1/3, i due Single valori rilevati dall'esempio di codice precedente non sono uguali.

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

In questo caso, i valori sono uguali.

Nota

Poiché Epsilon definisce l'espressione minima di un valore positivo il cui intervallo è vicino a zero, il margine di differenza deve essere maggiore di Epsilon. In genere, è più grande di Epsilon.

La precisione dei numeri a virgola mobile oltre la precisione documentata è specifica per l'implementazione e la versione di .NET Framework. Di conseguenza, un confronto di due numeri specifici potrebbe cambiare tra le versioni di .NET Framework perché la precisione della rappresentazione interna dei numeri potrebbe cambiare.

Note per i chiamanti

La risoluzione dell'overload del compilatore può tenere conto di una differenza apparente nel comportamento dei due Equals(Object) overload del metodo. Se viene definita una conversione implicita tra l'argomento obj e un Single oggetto e l'argomento non viene tipizzato come , Objecti compilatori possono eseguire una conversione implicita e chiamare il Equals(Single) metodo . In caso contrario, chiamano il Equals(Object) metodo , che restituisce false sempre se il relativo obj argomento non è un Single valore. Nell'esempio seguente viene illustrata la differenza di comportamento tra i due overload del metodo. Nel caso di tutti i tipi numerici primitivi tranne in Double Visual Basic e ad eccezione Decimal di e Double in C#, il primo confronto restituisce true perché il compilatore esegue automaticamente una conversione più ampia e chiama il metodo , mentre il Equals(Single) secondo confronto restituisce false perché il compilatore chiama il Equals(Object) metodo .

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

Vedi anche

Si applica a

Equals(Single)

Origine:
Single.cs
Origine:
Single.cs
Origine:
Single.cs

Restituisce un valore che indica se l'istanza e un oggetto Single specificato rappresentano lo stesso valore.

public bool Equals(float obj);

Parametri

obj
Single

Oggetto da confrontare con l'istanza.

Restituisce

true se obj è uguale all'istanza; in caso contrario, false.

Implementazioni

Commenti

Per altre informazioni su questa API, vedere Osservazioni supplementari sull'API per Single.Equals.

Note per i chiamanti

La risoluzione dell'overload del compilatore può tenere conto di una differenza apparente nel comportamento dei due Equals(Object) overload del metodo. Se viene definita una conversione implicita tra l'argomento obj e un Single oggetto e l'argomento non viene tipizzato come , Objecti compilatori possono eseguire una conversione implicita e chiamare il Equals(Single) metodo . In caso contrario, chiamano il Equals(Object) metodo , che restituisce false sempre se il relativo obj argomento non è un Single valore. Nell'esempio seguente viene illustrata la differenza di comportamento tra i due overload del metodo. Nel caso di tutti i tipi numerici primitivi tranne in Double Visual Basic e ad eccezione Decimal di e Double in C#, il primo confronto restituisce true perché il compilatore esegue automaticamente una conversione più ampia e chiama il metodo , mentre il Equals(Single) secondo confronto restituisce false perché il compilatore chiama il Equals(Object) metodo .

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

Vedi anche

Si applica a