Double.Equals Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce un valore che indica se due istanze di Double rappresentano lo stesso valore.
Overload
| Nome | Descrizione |
|---|---|
| Equals(Double) |
Restituisce un valore che indica se questa istanza e un oggetto specificato Double rappresentano lo stesso valore. |
| Equals(Object) |
Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato. |
Equals(Double)
- Origine:
- Double.cs
- Origine:
- Double.cs
- Origine:
- Double.cs
- Origine:
- Double.cs
- Origine:
- Double.cs
Restituisce un valore che indica se questa istanza e un oggetto specificato Double rappresentano lo stesso valore.
public:
virtual bool Equals(double obj);
public bool Equals(double obj);
override this.Equals : double -> bool
Public Function Equals (obj As Double) As Boolean
Parametri
Valori restituiti
true se obj è uguale a questa istanza; in caso contrario, false.
Implementazioni
Commenti
Il metodo Double.Equals(Double) implementa l'interfaccia System.IEquatable<T> ed esegue prestazioni leggermente migliori rispetto a Double.Equals(Object) poiché non è necessario convertire il parametro obj in un oggetto.
Conversioni di ampliamento
A seconda del linguaggio di programmazione, potrebbe essere possibile codificare un metodo Equals in cui il tipo di parametro ha meno bit (è più piccolo) rispetto al tipo di istanza. Ciò è possibile perché alcuni linguaggi di programmazione eseguono una conversione implicita di estensione che rappresenta il parametro come tipo con il maggior numero di bit dell'istanza.
Si supponga, ad esempio, che il tipo di istanza sia Double e che il tipo di parametro sia Int32. Il compilatore Microsoft C# genera istruzioni per rappresentare il valore del parametro come oggetto Double, quindi genera un metodo Double.Equals(Double) che confronta i valori dell'istanza e la rappresentazione estesa del parametro.
Consultare la documentazione del proprio linguaggio di programmazione per determinare se il compilatore esegue conversioni implicite di allargamento dei tipi numerici. Per altre informazioni, vedere l'argomento Tabelle di conversione dei tipi.
Precisione nelle comparazioni
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 Double valore .333333 e il Double valore restituito dividendo 1 per 3 non sono uguali.
// Initialize two doubles with apparently identical values
double double1 = .33333;
double double2 = (double) 1/3;
// Compare them for equality
Console.WriteLine(double1.Equals(double2)); // displays false
// Initialize two doubles with apparently identical values
let double1 = 0.33333
let double2 = double (1 / 3)
// Compare them for equality
printfn $"{double1.Equals double2}" // displays false
' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Double = 1/3
' Compare them for equality
Console.WriteLine(double1.Equals(double2)) ' displays False
Invece di confrontare l'uguaglianza, una tecnica prevede la definizione di un margine relativo accettabile di differenza tra due valori (ad esempio,001% 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, di conseguenza, i valori saranno uguali. Nell'esempio seguente viene usata questa tecnica per confrontare .33333 e 1/3, i due Double valori rilevati dall'esempio di codice precedente non sono uguali. In questo caso, i valori sono uguali.
// Initialize two doubles with apparently identical values
double double1 = .333333;
double double2 = (double) 1/3;
// Define the tolerance for variation in their values
double difference = Math.Abs(double1 * .00001);
// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(double1 - double2) <= difference)
Console.WriteLine("double1 and double2 are equal.");
else
Console.WriteLine("double1 and double2 are unequal.");
// Initialize two doubles with apparently identical values
let double1 = 0.333333
let double2 = double (1 / 3)
// Define the tolerance for variation in their values
let difference = abs (double1 * 0.00001)
// Compare the values
// The output to the console indicates that the two values are equal
if abs (double1 - double2) <= difference then
printfn "double1 and double2 are equal."
else
printfn "double1 and double2 are unequal."
' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Double = 1/3
' Define the tolerance for variation in their values
Dim difference As Double = Math.Abs(double1 * .00001)
' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(double1 - double2) <= difference Then
Console.WriteLine("double1 and double2 are equal.")
Else
Console.WriteLine("double1 and double2 are unequal.")
End If
Note
Poiché Epsilon definisce l'espressione minima di un valore positivo il cui intervallo è vicino a zero, il margine di differenza tra due valori simili deve essere maggiore di Epsilon. In genere, è molte volte maggiore di Epsilon. Per questo motivo, è consigliabile non usare Epsilon durante il confronto dei Double valori per l'uguaglianza.
Una seconda tecnica prevede il confronto della differenza tra due numeri a virgola mobile con un determinato valore assoluto. Se la differenza è minore o uguale a tale valore assoluto, i numeri sono uguali. Se è maggiore, i numeri non sono uguali. Un'alternativa consiste nel selezionare arbitrariamente un valore assoluto. Questo è problematico, tuttavia, perché un margine di differenza accettabile dipende dalla grandezza dei Double valori. Una seconda alternativa sfrutta una funzionalità di progettazione del formato a virgola mobile: la differenza tra la rappresentazione integer di due valori a virgola mobile indica il numero di possibili valori a virgola mobile che li separano. Ad esempio, la differenza tra 0,0 e Epsilon è 1, perché Epsilon è il valore rappresentabile più piccolo quando si lavora con un Double il cui valore è zero. Nell'esempio seguente, viene utilizzata questa tecnica per confrontare 0.33333 e 1/3, che sono i due valori Double che, secondo l'esempio di codice precedente con il metodo Equals(Double), risultano non essere uguali. Nell'esempio viene utilizzato il metodo BitConverter.DoubleToInt64Bits per convertire un valore a virgola mobile a doppia precisione nella relativa rappresentazione intera. Nell'esempio vengono dichiarati i valori come uguali se non sono presenti valori a virgola mobile possibili tra le relative rappresentazioni integer.
public static void Main()
{
// Initialize the values.
double value1 = .1 * 10;
double value2 = 0;
for (int ctr = 0; ctr < 10; ctr++)
value2 += .1;
Console.WriteLine($"{value1:R} = {value2:R}: " +
$"{HasMinimalDifference(value1, value2, 1)}");
}
public static bool HasMinimalDifference(
double value1,
double value2,
int allowableDifference
)
{
// Convert the double values to long values.
long lValue1 = BitConverter.DoubleToInt64Bits(value1);
long lValue2 = BitConverter.DoubleToInt64Bits(value2);
// If the signs are different, return false except for +0 and -0.
if ((lValue1 >> 63) != (lValue2 >> 63))
{
if (value1 == value2)
return true;
return false;
}
// Calculate the number of possible
// floating-point values in the difference.
long diff = Math.Abs(lValue1 - lValue2);
if (diff <= allowableDifference)
return true;
return false;
}
// The example displays the following output:
//
// 1 = 0.99999999999999989: True
open System
let hasMinimalDifference (value1: double) (value2: double) (units: int) =
let lValue1 = BitConverter.DoubleToInt64Bits value1
let lValue2 = BitConverter.DoubleToInt64Bits value2
// If the signs are different, return false except for +0 and -0.
if (lValue1 >>> 63) <> (lValue2 >>> 63) then
value1 = value2
else
let diff = abs (lValue1 - lValue2)
diff <= int64 units
let value1 = 0.1 * 10.
let mutable value2 = 0.
for _ = 0 to 9 do
value2 <- value2 + 0.1
printfn $"{value1:R} = {value2:R}: {hasMinimalDifference value1 value2 1}"
// The example displays the following output:
// 1 = 0.99999999999999989: True
Module Example1
Public Sub Main()
Dim value1 As Double = .1 * 10
Dim value2 As Double = 0
For ctr As Integer = 0 To 9
value2 += .1
Next
Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2,
HasMinimalDifference(value1, value2, 1))
End Sub
Public Function HasMinimalDifference(value1 As Double, value2 As Double, units As Integer) As Boolean
Dim lValue1 As long = BitConverter.DoubleToInt64Bits(value1)
Dim lValue2 As long = BitConverter.DoubleToInt64Bits(value2)
' If the signs are different, Return False except for +0 and -0.
If ((lValue1 >> 63) <> (lValue2 >> 63)) Then
If value1 = value2 Then
Return True
End If
Return False
End If
Dim diff As Long = Math.Abs(lValue1 - lValue2)
If diff <= units Then
Return True
End If
Return False
End Function
End Module
' The example displays the following output:
' 1 = 0.99999999999999989: True
Note
Per alcuni valori, è possibile considerarli uguali anche quando è presente un valore a virgola mobile possibile tra le rappresentazioni integer. Si considerino, ad esempio, i valori 0.39 "double" e 1.69 - 1.3 (che vengono calcolati come 0.3899999999999999). In un computer little-endian, le rappresentazioni intere di questi valori sono rispettivamente 4600697235336603894 e 4600697235336603892. La differenza tra i valori integer è 2, ovvero esiste un possibile valore a virgola mobile tra 0.39 e 1.69 - 1.3.
Differenze di versione
La precisione dei numeri a virgola mobile al di là della precisione documentata dipende dall'implementazione e dalla versione di .NET. Di conseguenza, un confronto di due numeri particolari potrebbe cambiare tra le versioni di .NET perché la precisione della rappresentazione interna dei numeri potrebbe cambiare.
NaN
Se due Double.NaN valori vengono testati per verificarne l'uguaglianza chiamando il Equals metodo , il metodo restituisce true. Tuttavia, se due Double.NaN valori vengono testati per verificare l'uguaglianza usando l'operatore di uguaglianza, l'operatore restituisce false. Quando si desidera determinare se il valore di un Double oggetto non è un numero (NaN), un'alternativa consiste nel chiamare il IsNaN metodo .
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 Double oggetto e l'argomento non viene tipizzato come Object, i compilatori possono eseguire una conversione implicita e chiamare il Equals(Double) metodo . In caso contrario, chiamano il Equals(Object) metodo , che restituisce false sempre se il relativo obj argomento non è un Double valore. Nell'esempio seguente viene illustrata la differenza di comportamento tra i due overload del metodo. Nel caso di tutti i tipi numerici primitivi ad eccezione Decimal di e in C#, il primo confronto restituisce true perché il compilatore esegue automaticamente una conversione più ampia e chiama il Equals(Double) metodo , mentre il secondo confronto restituisce false perché il compilatore chiama il Equals(Object) metodo .
using System;
public class OverExample
{
static double 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);
float sng1 = 112;
Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1));
TestObjectForEquality(sng1);
}
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 (Double) = 112 (Byte): False
//
// value = short1: True
// 112 (Double) = 112 (Int16): False
//
// value = int1: True
// 112 (Double) = 112 (Int32): False
//
// value = long1: True
// 112 (Double) = 112 (Int64): False
//
// value = sbyte1: True
// 112 (Double) = 112 (SByte): False
//
// value = ushort1: True
// 112 (Double) = 112 (UInt16): False
//
// value = uint1: True
// 112 (Double) = 112 (UInt32): False
//
// value = ulong1: True
// 112 (Double) = 112 (UInt64): False
//
// value = dec1: False
// 112 (Double) = 112 (Decimal): False
//
// value = sng1: True
// 112 (Double) = 112 (Single): False
let value = 112
let testObjectForEquality (obj: obj) =
printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"
let byte1 = 112uy
printfn $"value = byte1: {value.Equals byte1,16}"
testObjectForEquality byte1
let short1 = 112s
printfn $"value = short1: {value.Equals short1,16}"
testObjectForEquality short1
let int1 = 112
printfn $"value = int1: {value.Equals int1,18}"
testObjectForEquality int1
let long1 = 112L
printfn $"value = long1: {value.Equals long1,17}"
testObjectForEquality long1
let sbyte1 = 112y
printfn $"value = sbyte1: {value.Equals sbyte1,16}"
testObjectForEquality sbyte1
let ushort1 = 112us
printfn $"value = ushort1: {value.Equals ushort1,16}"
testObjectForEquality ushort1
let uint1 = 112u
printfn $"value = uint1: {value.Equals uint1,18}"
testObjectForEquality uint1
let ulong1 = 112uL
printfn $"value = ulong1: {value.Equals ulong1,17}"
testObjectForEquality ulong1
let dec1 = 112m
printfn $"value = dec1: {value.Equals dec1,21}"
testObjectForEquality dec1
let sng1 = 112f
printfn $"value = sng1: {value.Equals sng1,19}"
testObjectForEquality sng1
// The example displays the following output:
// value = byte1: True
// 112 (Double) = 112 (Byte): False
//
// value = short1: True
// 112 (Double) = 112 (Int16): False
//
// value = int1: True
// 112 (Double) = 112 (Int32): False
//
// value = long1: True
// 112 (Double) = 112 (Int64): False
//
// value = sbyte1: True
// 112 (Double) = 112 (SByte): False
//
// value = ushort1: True
// 112 (Double) = 112 (UInt16): False
//
// value = uint1: True
// 112 (Double) = 112 (UInt32): False
//
// value = ulong1: True
// 112 (Double) = 112 (UInt64): False
//
// value = dec1: False
// 112 (Double) = 112 (Decimal): False
//
// value = sng1: True
// 112 (Double) = 112 (Single): False
Module Example2
Dim value As Double = 112
Public Sub Main()
Dim byte1 As Byte = 112
Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1))
TestObjectForEquality(byte1)
Dim short1 As Short = 112
Console.WriteLine("value = short1: {0,16}", value.Equals(short1))
TestObjectForEquality(short1)
Dim int1 As Integer = 112
Console.WriteLine("value = int1: {0,18}", value.Equals(int1))
TestObjectForEquality(int1)
Dim long1 As Long = 112
Console.WriteLine("value = long1: {0,17}", value.Equals(long1))
TestObjectForEquality(long1)
Dim sbyte1 As SByte = 112
Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1))
TestObjectForEquality(sbyte1)
Dim ushort1 As UShort = 112
Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1))
TestObjectForEquality(ushort1)
Dim uint1 As UInteger = 112
Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1))
TestObjectForEquality(uint1)
Dim ulong1 As ULong = 112
Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1))
TestObjectForEquality(ulong1)
Dim dec1 As Decimal = 112d
Console.WriteLine("value = dec1: {0,20}", value.Equals(dec1))
TestObjectForEquality(dec1)
Dim sng1 As Single = 112
Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1))
TestObjectForEquality(sng1)
End Sub
Private Sub TestObjectForEquality(obj As Object)
Console.WriteLine("{0} ({1}) = {2} ({3}): {4}",
value, value.GetType().Name,
obj, obj.GetType().Name,
value.Equals(obj))
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' value = byte1: True
' 112 (Double) = 112 (Byte): False
'
' value = short1: True
' 112 (Double) = 112 (Int16): False
'
' value = int1: True
' 112 (Double) = 112 (Int32): False
'
' value = long1: True
' 112 (Double) = 112 (Int64): False
'
' value = sbyte1: True
' 112 (Double) = 112 (SByte): False
'
' value = ushort1: True
' 112 (Double) = 112 (UInt16): False
'
' value = uint1: True
' 112 (Double) = 112 (UInt32): False
'
' value = ulong1: True
' 112 (Double) = 112 (UInt64): False
'
' value = dec1: True
' 112 (Double) = 112 (Decimal): False
'
' value = sng1: True
' 112 (Double) = 112 (Single): False
Vedi anche
Si applica a
Equals(Object)
- Origine:
- Double.cs
- Origine:
- Double.cs
- Origine:
- Double.cs
- Origine:
- Double.cs
- Origine:
- Double.cs
Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.
public:
override bool Equals(System::Object ^ obj);
public override bool Equals(object obj);
public override bool Equals(object? obj);
override this.Equals : obj -> bool
Public Overrides Function Equals (obj As Object) As Boolean
Parametri
- obj
- Object
Oggetto da confrontare con questa istanza.
Valori restituiti
true se obj è un'istanza di Double e è uguale al valore di questa istanza; in caso contrario, false.
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 valore Double .3333 e il Double restituito dividendo 1 per 3 non sono uguali.
// Initialize two doubles with apparently identical values
double double1 = .33333;
object double2 = (double) 1/3;
// Compare them for equality
Console.WriteLine(double1.Equals(double2)); // displays false
// Initialize two doubles with apparently identical values
let double1 = 0.33333
let double2 = double (1 / 3) |> box
// Compare them for equality
printfn $"{double1.Equals double2}" // displays false
' Initialize two doubles with apparently identical values
Dim double1 As Double = .33333
Dim double2 As Object = 1/3
' Compare them for equality
Console.WriteLine(double1.Equals(double2)) ' displays False
Per le alternative alla chiamata al Equals metodo, vedere la documentazione per l'overload Equals(Double) .
Note
Poiché Epsilon definisce l'espressione minima di un valore positivo il cui intervallo è vicino a zero, il margine di differenza tra due valori simili deve essere maggiore di Epsilon. In genere, è molte volte maggiore 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 particolari potrebbe cambiare tra le versioni di .NET Framework perché la precisione della rappresentazione interna dei numeri potrebbe cambiare.
Se due Double.NaN valori vengono testati per verificarne l'uguaglianza chiamando il Equals metodo , il metodo restituisce true. Tuttavia, se due NaN valori vengono testati per verificare l'uguaglianza usando l'operatore di uguaglianza, l'operatore restituisce false. Quando si desidera determinare se il valore di un Double oggetto non è un numero (NaN), un'alternativa consiste nel chiamare il IsNaN metodo .
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 Double oggetto e l'argomento non viene tipizzato come Object, i compilatori possono eseguire una conversione implicita e chiamare il Equals(Double) metodo . In caso contrario, chiamano il Equals(Object) metodo , che restituisce false sempre se il relativo obj argomento non è un Double valore. Nell'esempio seguente viene illustrata la differenza di comportamento tra i due overload del metodo. Nel caso di tutti i tipi numerici primitivi ad eccezione Decimal di e in C#, il primo confronto restituisce true perché il compilatore esegue automaticamente una conversione più ampia e chiama il Equals(Double) metodo , mentre il secondo confronto restituisce false perché il compilatore chiama il Equals(Object) metodo .
using System;
public class OverExample
{
static double 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);
float sng1 = 112;
Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1));
TestObjectForEquality(sng1);
}
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 (Double) = 112 (Byte): False
//
// value = short1: True
// 112 (Double) = 112 (Int16): False
//
// value = int1: True
// 112 (Double) = 112 (Int32): False
//
// value = long1: True
// 112 (Double) = 112 (Int64): False
//
// value = sbyte1: True
// 112 (Double) = 112 (SByte): False
//
// value = ushort1: True
// 112 (Double) = 112 (UInt16): False
//
// value = uint1: True
// 112 (Double) = 112 (UInt32): False
//
// value = ulong1: True
// 112 (Double) = 112 (UInt64): False
//
// value = dec1: False
// 112 (Double) = 112 (Decimal): False
//
// value = sng1: True
// 112 (Double) = 112 (Single): False
let value = 112
let testObjectForEquality (obj: obj) =
printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"
let byte1 = 112uy
printfn $"value = byte1: {value.Equals byte1,16}"
testObjectForEquality byte1
let short1 = 112s
printfn $"value = short1: {value.Equals short1,16}"
testObjectForEquality short1
let int1 = 112
printfn $"value = int1: {value.Equals int1,18}"
testObjectForEquality int1
let long1 = 112L
printfn $"value = long1: {value.Equals long1,17}"
testObjectForEquality long1
let sbyte1 = 112y
printfn $"value = sbyte1: {value.Equals sbyte1,16}"
testObjectForEquality sbyte1
let ushort1 = 112us
printfn $"value = ushort1: {value.Equals ushort1,16}"
testObjectForEquality ushort1
let uint1 = 112u
printfn $"value = uint1: {value.Equals uint1,18}"
testObjectForEquality uint1
let ulong1 = 112uL
printfn $"value = ulong1: {value.Equals ulong1,17}"
testObjectForEquality ulong1
let dec1 = 112m
printfn $"value = dec1: {value.Equals dec1,21}"
testObjectForEquality dec1
let sng1 = 112f
printfn $"value = sng1: {value.Equals sng1,19}"
testObjectForEquality sng1
// The example displays the following output:
// value = byte1: True
// 112 (Double) = 112 (Byte): False
//
// value = short1: True
// 112 (Double) = 112 (Int16): False
//
// value = int1: True
// 112 (Double) = 112 (Int32): False
//
// value = long1: True
// 112 (Double) = 112 (Int64): False
//
// value = sbyte1: True
// 112 (Double) = 112 (SByte): False
//
// value = ushort1: True
// 112 (Double) = 112 (UInt16): False
//
// value = uint1: True
// 112 (Double) = 112 (UInt32): False
//
// value = ulong1: True
// 112 (Double) = 112 (UInt64): False
//
// value = dec1: False
// 112 (Double) = 112 (Decimal): False
//
// value = sng1: True
// 112 (Double) = 112 (Single): False
Module Example2
Dim value As Double = 112
Public Sub Main()
Dim byte1 As Byte = 112
Console.WriteLine("value = byte1: {0,16}", value.Equals(byte1))
TestObjectForEquality(byte1)
Dim short1 As Short = 112
Console.WriteLine("value = short1: {0,16}", value.Equals(short1))
TestObjectForEquality(short1)
Dim int1 As Integer = 112
Console.WriteLine("value = int1: {0,18}", value.Equals(int1))
TestObjectForEquality(int1)
Dim long1 As Long = 112
Console.WriteLine("value = long1: {0,17}", value.Equals(long1))
TestObjectForEquality(long1)
Dim sbyte1 As SByte = 112
Console.WriteLine("value = sbyte1: {0,16}", value.Equals(sbyte1))
TestObjectForEquality(sbyte1)
Dim ushort1 As UShort = 112
Console.WriteLine("value = ushort1: {0,16}", value.Equals(ushort1))
TestObjectForEquality(ushort1)
Dim uint1 As UInteger = 112
Console.WriteLine("value = uint1: {0,18}", value.Equals(uint1))
TestObjectForEquality(uint1)
Dim ulong1 As ULong = 112
Console.WriteLine("value = ulong1: {0,17}", value.Equals(ulong1))
TestObjectForEquality(ulong1)
Dim dec1 As Decimal = 112d
Console.WriteLine("value = dec1: {0,20}", value.Equals(dec1))
TestObjectForEquality(dec1)
Dim sng1 As Single = 112
Console.WriteLine("value = sng1: {0,19}", value.Equals(sng1))
TestObjectForEquality(sng1)
End Sub
Private Sub TestObjectForEquality(obj As Object)
Console.WriteLine("{0} ({1}) = {2} ({3}): {4}",
value, value.GetType().Name,
obj, obj.GetType().Name,
value.Equals(obj))
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' value = byte1: True
' 112 (Double) = 112 (Byte): False
'
' value = short1: True
' 112 (Double) = 112 (Int16): False
'
' value = int1: True
' 112 (Double) = 112 (Int32): False
'
' value = long1: True
' 112 (Double) = 112 (Int64): False
'
' value = sbyte1: True
' 112 (Double) = 112 (SByte): False
'
' value = ushort1: True
' 112 (Double) = 112 (UInt16): False
'
' value = uint1: True
' 112 (Double) = 112 (UInt32): False
'
' value = ulong1: True
' 112 (Double) = 112 (UInt64): False
'
' value = dec1: True
' 112 (Double) = 112 (Decimal): False
'
' value = sng1: True
' 112 (Double) = 112 (Single): False