Single.Equals Yöntem

Tanım

İ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

Ayrıca bkz.

Şunlara uygulanır