'İddia arasındaki fark ne.AreNotEqual ve İddia.AreNotSame?
C# arasındaki fark nedir
Assert.AreNotEqual
ve
Assert.AreNotSame
CEVAP
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
.)
İnat arasındaki fark nedir() ve birleş...
Düzenli bir dize ve bir verbatim strin...
Olay güdümlü model ve reaktör örüntü a...
Del arasındaki fark, ve listelerinde k...
PHP tek tırnaklı ve çift tırnaklı dize...