2011-11-16 21 views
14

VS 2010'daki hemen pencerenin bir C# projesi ve bir VB.NET projesinde hata ayıklaması yaparken farklı şekilde davrandığını fark ettim, ancak özel bir belgeyi bulamadım. Bu fark.C# ve VB.NET'teki hemen pencere davranışı farklılıkları

C# projeleri için

, ben sadece herhangi bir ifade yazabilirsiniz ve değerlendirilir ve gösterilir, yani yazarak

foo.bar içinde olacak == "baz"

irade çıkışı

VB.NET yalancı

h çünkü, aynı şeyi yapmak hiçbir şey çıkarmaz.

Çalışması için ifadenin önüne bir soru işareti koymam gerekiyor.

yukarıda foo.bar = "baz" netlik için

yanlış

Düzenleme ve benim kötü örnek:? Tüm diğer ifadeler basit matematik böyle dahil aynı davranışı sergiler

'1 + 2' olarak. Bazen hata mesajı farklı olsa da, 1 + 2 hataya neden olur. 'Sayılar olan etiketlerin saydam olması gerekir.'

Bu davranışı 'düzeltmek' ve VB.NET anında penceresinin daha C# gibi davranmasını sağlamanın bir yolu var mı? Yazmak zorunda? Her ifadenin önünde sık sık kullanırken bir ağrı olabilir.

cevap

14

Anlık pencerelerin semantikleri farklıdır. C# 'da girdiğiniz herhangi bir ifade veya ifade değerlendirilir ve değerlendirmenin sonucu pencereye yazdırılır. VB.NET'te eksiksiz bir ifade girmelisiniz; çıplak bir ifade giremezsiniz. Örneğinizde, keşfettiğiniz gibi, pencereye bir şey yazdırmak istiyorsanız 'Yazdır' ifadesini (diğer adı ? olan) kullanmanız gerekir.

Bunun bir nedeni, dillerin anlamlarının farklı olmasıdır. Bob Kaufman'ın da belirttiği gibi, = bir atama operatörü veya bir eşitlik testi olabilir. Eğer VB.NET penceresi C# penceresi gibi çalıştıysa, a = b'un "b'ye a" a mı yoksa "b'nin a'ya eşit olup olmadığını" mı belirleyeceğini belirlemenin hiçbir yolu yoktur.

Atamalar VB.NET'te bir değere sahip değil; a = b = 4, "b'nin 4'e eşit olup olmadığını değerlendirir ve bu değerlendirmenin sonucunu a'ya atar." Bu, bir irade ya doğru ya da yanlış olan anlamına gelir.

C# içinde, bir değer de bir değere sahip bir ifadedir, bu nedenle a = b = 4 "4 değerini b'ye atar ve ifadenin değerini (b = 4) a atar." Bu, 4'e eşit olacak demektir.

+0

Teşekkürler, bu oldukça mantıklı. Özellikle de basit bir mülk değerlendirmesi için hala bir acı. –

+1

Yani, temelde, ifadelerinizin önüne bir '?' Ifadesini koyunuz; – levininja

+0

@levininja kesinlikle; soru az çok "neden gerekli?" – phoog

5

Hemen pencere eşleyicisi, "" ifadesi ifadesini kullanmıyorsa Komut.

komutları yasal olarak geçerlidir.net, atama ifadesidir, bar alanını veya "baz" değerini alan nesnenin özelliğini verir. Bununla birlikte, bar sınıfının bir yöntemi ise şikayet edilecektir. Benzer şekilde, "1 + 2", vb.net'de geçerli bir ifade değildir. Komut, tercümanın bir ifadeyi değerlendirmek istediğinizi anlamasına yardımcı olur. = Operatörü bir ödevden bir karşılaştırma operatörüne döndürmek için, çözümleyicinin bir ifadenin değerlendirildiğini anlamasını sağlamanız gerekir. ? gereklidir. "1 + 2" için de aynı şey, vb.net deyim ayrıştırıcısı bir deyimin başlangıcında bir bildirim etiketi olarak bir numara kabul eder, bir GoTo için uygun.

C# dili, kıvrık ayraç dilleri standardını izler, burada her ifade aynı zamanda geçerli bir ifadedir. Yani "1 + 2", yardım almadan geçerli bir ifade olarak yorumlanır? Ayrıca, eşitlik operatörü (==) için ayrı bir simgeye ihtiyaç duymasının nedeni de budur; bir ayrıştırıcı, bir atama ifadesi ve bir ifade arasındaki farkı bilmez.

+0

Ek açıklamalar için teşekkürler! –