SORU
12 ŞUBAT 2009, PERŞEMBE


'İddia arasındaki fark ne.AreNotEqual ve İddia.AreNotSame?

C# arasındaki fark nedir

Assert.AreNotEqual

ve

Assert.AreNotSame

CEVAP
12 ŞUBAT 2009, PERŞEMBE


Hemen hemen bütün cevaplar burada verilen doğru, ama muhtemelen bir örnek vermek: değer

public static string GetSecondWord(string text)
{
    // Yes, an appalling implementation...
    return text.Split(' ')[1];
}

string expected = "world";
string actual = GetSecondWord("hello world");

// Good: the two strings should be *equal* as they have the same contents
Assert.AreEqual(expected, actual);

// Bad: the two string *references* won't be the same
Assert.AreSame(expected, actual);

AreNotEqual AreNotSame AreEqual ve elbette AreSame çalışmalıyız.

DÜZENLEME: 27**... . Bu BİR çürütme

Eğer değer türleri ile Assert.AreSame kullanırsanız, kutulu. Diğer bir deyişle, yapmaya denk geliyor:

int firstNumber = 1;
int secondNumber = 1;
object boxedFirstNumber = firstNumber;
object boxedSecondNumber = secondNumber;

// There are overloads for AreEqual for various value types
// (assuming NUnit here)
Assert.AreEqual(firstNumber, secondNumber);

// ... but not for AreSame, as it's not intended for use with value types
Assert.AreSame(boxedFirstNumber, boxedSecondNumber);

Ne firstNumber ne secondNumber int bir değer türü olduğundan nesnenin bir değeri de var. AreSame çağrı başarısız olur nedeni olduğu için .NET bir değer boks yeni bir kutu her zaman oluşturur. (Bazen bu bana daha önce yakalanmış olan mi - değil Java.)

Temelde gerekirasladeğer türleri karşılaştırırken AreSame kullanın. Kıyaslıyorsunbaşvurutürleri, aynı kaynaklar için kontrol edin; AreEqual Equals altında denkliğini kontrol etmek için kullanmak istiyorsanız AreSame kullanın. EDİT: UnutmayınNUnit durumlar sadece Equals doğrudan kullanmaz; koleksiyon öğeleri eşitlik için test nerede yerleşik koleksiyonlar için destek vardır.

Yanıt iddia:

Değişen yukarıdaki örneği kullanarak int string, AreSame ve AreEqual için aynı değeri döndürür.

tamamen değişkenleri nasıl başlatılır bağlıdır. Eğer dize hazır kullanıyorsanız, henüz, staj ilgilenecek. Eğer, ancak, kullanın:

string firstString = 1.ToString();
string secondString = 1.ToString();

sonra AreSame ve AreEqual olacak neredeyse kesinlikledeğilaynı değeri döndürür.

Gelince:

Başparmak genel bir kural kullanmaktır Değer türleri üzerinde AreEqual ve AreSame başvuru türleri.

Neredeyseaslabaşvuru için kimlik kontrol etmek istiyorum. Benim için pek yararlı değil. Kontrol etmek istiyorumdenklikAreEqual denetler. (AreSame olmamalı demiyorum - yararlı bir yöntem değil, sadece çok daha nadiren daha AreEqual.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • EEVblog

    EEVblog

    4 NİSAN 2009
  • stokelycalm

    stokelycalm

    28 Aralık 2010