Single.Equals Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
İki örneğinin Single aynı değeri temsil edip etmediğini belirten bir değer döndürür.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| Equals(Object) |
Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer 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
- Kaynak:
- Single.cs
- Kaynak:
- Single.cs
Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür.
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
Parametreler
- obj
- Object
Bu örnekle karşılaştıracak bir nesne.
Döndürülenler
trueörneğiyse obj ve bu örneğin değerine eşitseSingle; 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.");
}
let obj1 = single 500
if a.Equals obj1 then
printfn "The value type and reference type values are equal."
Obj1 = CType(500, Single)
If A.Equals(Obj1) Then
Console.WriteLine("The value type and reference type values are equal.")
End If
Açıklamalar
Equals yöntemi dikkatli bir şekilde kullanılmalıdır, çünkü iki görünüşte eşdeğer olan değer, farklı duyarlık nedeniyle eşit olmayabilir. Aşağıdaki örnek, Single değerinin .3333 olduğunu ve 1'in 3'e bölünmesiyle elde edilen Single değerinin 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
// Initialize two floats with apparently identical values
let float1 = 0.33333f
let float2 = box (1f / 3f)
// Compare them for equality
printfn $"{float1.Equals float2}" // displays false
' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Object = 1/3
' Compare them for equality
Console.WriteLine(single1.Equals(single2)) ' displays False
Eşitlik karşılaştırması yerine, önerilen tekniklerden biri iki değer arasında kabul edilebilir bir fark marjı tanımlamayı içerir (örneğin, değerlerden birinin 0,01%). İki değer arasındaki farkın mutlak değeri bu kenar boşluğundan küçük veya buna eşitse, farkın büyük olasılıkla duyarlık farklılıkları ve dolayısıyla değerlerin eşit olması muhtemeldir. 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.");
// Initialize two floats with apparently identical values
let float1 = 0.33333f
let float2 = box (1f / 3f)
// Define the tolerance for variation in their values
let difference = abs (float1 * 0.0001f)
// Compare the values
// The output to the console indicates that the two values are equal
if abs (float1 - (float2 :?> float32)) <= difference then
printfn "float1 and float2 are equal."
else
printfn "float1 and float2 are unequal."
' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Object = 1/3
' Define the tolerance for variation in their values
Dim difference As Single = Math.Abs(single1 * .0001f)
' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(single1 - CSng(single2)) <= difference Then
Console.WriteLine("single1 and single2 are equal.")
Else
Console.WriteLine("single1 and single2 are unequal.")
End If
Bu durumda değerler eşittir.
Note
Aralığı sıfıra yakın olan pozitif bir değerin minimum ifadesini tanımladığından Epsilon , farkın kenar boşluğu değerinden Epsilonbüyük olmalıdır. Genellikle, Epsilon'nin katları kadar büyüktür.
Kayan noktalı sayıların, belgelenen duyarlığı aşan duyarlığı, .NET Framework'ün uygulanmasına ve sürümüne özgüdür. Sonuç olarak, sayıların iç gösteriminin duyarlığı değişebileceğinden, belirli iki sayının karşılaştırması .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ışındaki belirgin bir farkı hesaba katabilir. bağımsız değişkeni ile arasında obj örtük bir dönüştürme tanımlanırsa ve bağımsız değişken bir Singleolarak yazılmazsa, derleyiciler örtük bir dönüştürme gerçekleştirebilir ve yöntemini çağırabilirObject.Equals(Single) Aksi takdirde, bağımsız değişkeni bir değer değilse Equals(Object) her zaman döndüren false yöntemini çağırırlarobj.Single Aşağıdaki örnekte iki yöntem aşırı yüklemesi arasındaki davranış farkı gösterilmektedir. Visual Basic Double dışında ve C# dilinde Decimal ve Double dışında tüm temel sayısal türler söz konusu olduğunda, derleyici otomatik olarak bir genişletme dönüştürmesi gerçekleştirdiğinden ve true yöntemini çağırdığından ilk karşılaştırma Equals(Single) döndürürken, derleyici false yöntemini çağırdığı için ikinci karşılaştırma Equals(Object) döndürür.
using System;
public class Example2
{
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
let value = 112f
let testObjectForEquality (obj: obj) =
printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"
[<EntryPoint>]
let main _ =
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 dbl1 = 112.
printfn $"value = dbl1: {value.Equals dbl1,20}"
testObjectForEquality dbl1
0
// 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
Module Example2
Dim value As Single = 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 dbl1 As Double = 112
Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1))
TestObjectForEquality(dbl1)
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 (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: True
' 112 (Single) = 112 (Decimal): False
'
' value = dbl1: False
' 112 (Single) = 112 (Double): False
Ayrıca bkz.
Şunlara uygulanır
Equals(Single)
- Kaynak:
- Single.cs
- Kaynak:
- Single.cs
- 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:
virtual bool Equals(float obj);
public bool Equals(float obj);
override this.Equals : single -> bool
Public Function Equals (obj As Single) As Boolean
Parametreler
- obj
- Single
Bu örnekle karşılaştıracak bir nesne.
Döndürülenler
true bu örneğe eşitse obj ; değilse, false.
Uygulamalar
Açıklamalar
Single.Equals(Single) yöntemi, System.IEquatable<T> arabirimini uygular ve Single.Equals(Object) parametresini bir nesneye dönüştürmesi gerekmediğinden obj ile karşılaştırıldığında biraz daha iyi performans gösterir.
Genişleyen dönüşümler
Programlama dilinize bağlı olarak, parametre türünün örnek türünden daha az bit (daha dar) olduğu bir Equals yöntem kodlayabilirsiniz. Bunun nedeni, bazı programlama dillerinin parametreyi örnek kadar bit içeren bir tür olarak temsil eden örtük bir genişletme dönüştürmesi gerçekleştirmesi olabilir.
Örneğin, örnek türü Single ve parametre türü Int32 olsun. Microsoft C# derleyicisi parametrenin değerini nesne Single olarak temsil eden yönergeler oluşturur ve ardından örneğin değerlerini ve parametrenin geniş gösterimini karşılaştıran bir Single.Equals(Single) yöntem oluşturur.
Programlama dilinizle ilgili belgelere bakarak; derleyicisinin, sayısal türlere ilişkin örtülü genişletme dönüştürmeleri yapıp yapmadığını belirleyin. Daha fazla bilgi için bkz. Tür Dönüştürme Tabloları.
Karşılaştırmalarda kesinlik
Equals yöntemi dikkatli bir şekilde kullanılmalıdır, çünkü görünüşte eşdeğer olan iki değer, farklı duyarlıklara sahip olmaları nedeniyle eşit olmayabilir. Aşağıdaki örnek, Single değerinin .3333 olduğunu ve 1'in 3'e bölünmesiyle elde edilen Single değerinin eşit olmadığını bildirir.
// Initialize two floats with apparently identical values
float float1 = .33333f;
float float2 = 1/3;
// Compare them for equality
Console.WriteLine(float1.Equals(float2)); // displays false
// Initialize two floats with apparently identical values
let float1 = 0.33333f
let float2 = 1f / 3f
// Compare them for equality
printfn $"{float1.Equals float2}" // displays false
' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Single = 1/3
' Compare them for equality
Console.WriteLine(single1.Equals(single2)) ' displays False
Eşitlik karşılaştırmasıyla ilgili sorunlardan kaçınan bir karşılaştırma tekniği, iki değer arasında kabul edilebilir bir fark marjı tanımlamayı içerir (örneğin, değerlerden birinin 0,01%). İ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ının sonucudur ve bu nedenle değerlerin eşit olması muhtemeldir. Aşağıdaki örnek, önceki kod örneğinin eşit olmadığını bulduğu iki Single değer olan .33333 ve 1/3'leri karşılaştırmak için bu tekniği kullanır.
// Initialize two floats with apparently identical values
float float1 = .33333f;
float 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 - float2) <= difference)
Console.WriteLine("float1 and float2 are equal.");
else
Console.WriteLine("float1 and float2 are unequal.");
// Initialize two floats with apparently identical values
let float1 = 0.33333f
let float2 = 1f / 3f
// Define the tolerance for variation in their values
let difference = abs (float1 * 0.0001f)
// Compare the values
// The output to the console indicates that the two values are equal
if abs (float1 - float2) <= difference then
printfn "float1 and float2 are equal."
else
printfn "float1 and float2 are unequal."
' Initialize two singles with apparently identical values
Dim single1 As Single = .33333
Dim single2 As Single = 1/3
' Define the tolerance for variation in their values
Dim difference As Single = Math.Abs(single1 * .0001f)
' Compare the values
' The output to the console indicates that the two values are equal
If Math.Abs(single1 - single2) <= difference Then
Console.WriteLine("single1 and single2 are equal.")
Else
Console.WriteLine("single1 and single2 are unequal.")
End If
Bu durumda değerler eşittir.
Note
Aralığı sıfıra yakın olan pozitif bir değerin minimum ifadesini tanımladığından Epsilon , farkın kenar boşluğu değerinden Epsilonbüyük olmalıdır. Genellikle, Epsilon'nin katları kadar büyüktür. Bu nedenle, Epsilon değerlerini eşitlik için karşılaştırırken Double kullanmamanızı öneririz.
Eşitlik karşılaştırmasıyla ilgili sorunlardan kaçınan ikinci bir teknik, iki kayan noktalı sayı arasındaki farkın mutlak bir değerle karşılaştırılmasını içerir. Fark bu mutlak değerden küçük veya buna eşitse, sayılar eşittir. Daha büyükse, sayılar eşit değildir. Bunu yapmanızın bir yolu, rastgele bir mutlak değer seçmektir. Ancak, kabul edilebilir bir fark marjı değerlerin büyüklüğüne Single bağlı olduğundan bu sorun yaratır. İkinci bir yol kayan nokta biçiminin tasarım özelliğinden yararlanır: İki kayan nokta değerinin tamsayı gösterimlerindeki mantis bileşenleri arasındaki fark, iki değeri ayıran olası kayan nokta değerlerinin sayısını gösterir. Örneğin, 0,0 ile Epsilon 1 arasındaki farktır, çünkü Epsilon değeri sıfır olan bir Single değerle çalışırken en küçük temsil edilebilir değerdir. Aşağıdaki örnek, önceki kod örneğinin yöntemle eşit olmadığını bulduğu iki Double değer olan .33333 ve Equals(Single) 1/3'leri karşılaştırmak için bu tekniği kullanır. Örneğin, tek duyarlıklı kayan nokta değerini tamsayı gösterimine dönüştürmek için BitConverter.GetBytes ve BitConverter.ToInt32 yöntemlerini kullandığını unutmayın.
using System;
public class Example
{
public static void Main()
{
float value1 = .1f * 10f;
float value2 = 0f;
for (int ctr = 0; ctr < 10; ctr++)
value2 += .1f;
Console.WriteLine($"{value1:R} = {value2:R}: {HasMinimalDifference(value1, value2, 1)}");
}
public static bool HasMinimalDifference(float value1, float value2, int units)
{
byte[] bytes = BitConverter.GetBytes(value1);
int iValue1 = BitConverter.ToInt32(bytes, 0);
bytes = BitConverter.GetBytes(value2);
int iValue2 = BitConverter.ToInt32(bytes, 0);
// If the signs are different, return false except for +0 and -0.
if ((iValue1 >> 31) != (iValue2 >> 31))
{
if (value1 == value2)
return true;
return false;
}
int diff = Math.Abs(iValue1 - iValue2);
if (diff <= units)
return true;
return false;
}
}
// The example displays the following output:
// 1 = 1.00000012: True
open System
let hasMinimalDifference (value1: float32) (value2: float32) units =
let bytes = BitConverter.GetBytes value1
let iValue1 = BitConverter.ToInt32(bytes, 0)
let bytes = BitConverter.GetBytes(value2)
let iValue2 = BitConverter.ToInt32(bytes, 0)
// If the signs are different, return false except for +0 and -0.
if (iValue1 >>> 31) <> (iValue2 >>> 31) then
value1 = value2
else
let diff = abs (iValue1 - iValue2)
diff <= units
let value1 = 0.1f * 10f
let value2 =
List.replicate 10 0.1f
|> List.sum
printfn $"{value1:R} = {value2:R}: {hasMinimalDifference value1 value2 1}"
// The example displays the following output:
// 1 = 1.0000001: True
Module Example1
Public Sub Main()
Dim value1 As Single = .1 * 10
Dim value2 As Single = 0
For ctr As Integer = 0 To 9
value2 += CSng(.1)
Next
Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2,
HasMinimalDifference(value1, value2, 1))
End Sub
Public Function HasMinimalDifference(value1 As Single, value2 As Single, units As Integer) As Boolean
Dim bytes() As Byte = BitConverter.GetBytes(value1)
Dim iValue1 As Integer = BitConverter.ToInt32(bytes, 0)
bytes = BitConverter.GetBytes(value2)
Dim iValue2 As Integer = BitConverter.ToInt32(bytes, 0)
' If the signs are different, Return False except for +0 and -0.
If ((iValue1 >> 31) <> (iValue2 >> 31)) Then
If value1 = value2 Then
Return True
End If
Return False
End If
Dim diff As Integer = Math.Abs(iValue1 - iValue2)
If diff <= units Then
Return True
End If
Return False
End Function
End Module
' The example displays the following output:
' 1 = 1.00000012: True
Kayan noktalı sayıların, belgelenen duyarlığı aşan duyarlığı, .NET'in uygulamasına ve sürümüne özgüdür. Sonuç olarak, iki sayının karşılaştırması .NET sürümüne bağlı olarak farklı sonuçlar verebilir, çünkü sayıların iç gösteriminin duyarlığı değişebilir.
Arayanlara Notlar
Derleyici aşırı yükleme çözümlemesi, iki Equals(Object) yöntem aşırı yüklemesinin davranışındaki belirgin bir farkı hesaba katabilir. bağımsız değişkeni ile arasında obj örtük bir dönüştürme tanımlanırsa ve bağımsız değişken bir Singleolarak yazılmazsa, derleyiciler örtük bir dönüştürme gerçekleştirebilir ve yöntemini çağırabilirObject.Equals(Single) Aksi takdirde, bağımsız değişkeni bir değer değilse Equals(Object) her zaman döndüren false yöntemini çağırırlarobj.Single Aşağıdaki örnekte iki yöntem aşırı yüklemesi arasındaki davranış farkı gösterilmektedir. Visual Basic Double dışında ve C# dilinde Decimal ve Double dışında tüm temel sayısal türler söz konusu olduğunda, derleyici otomatik olarak bir genişletme dönüştürmesi gerçekleştirdiğinden ve true yöntemini çağırdığından ilk karşılaştırma Equals(Single) döndürürken, derleyici false yöntemini çağırdığı için ikinci karşılaştırma Equals(Object) döndürür.
using System;
public class Example2
{
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
let value = 112f
let testObjectForEquality (obj: obj) =
printfn $"{value} ({value.GetType().Name}) = {obj} ({obj.GetType().Name}): {value.Equals obj}\n"
[<EntryPoint>]
let main _ =
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 dbl1 = 112.
printfn $"value = dbl1: {value.Equals dbl1,20}"
testObjectForEquality dbl1
0
// 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
Module Example2
Dim value As Single = 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 dbl1 As Double = 112
Console.WriteLine("value = dbl1: {0,20}", value.Equals(dbl1))
TestObjectForEquality(dbl1)
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 (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: True
' 112 (Single) = 112 (Decimal): False
'
' value = dbl1: False
' 112 (Single) = 112 (Double): False