Powiel możliwe:
Bug?? If you assign a value to a nullable integer via a ternary operator, it can't become nullCo to jest odpowiednik VB.NET domyślnego słowa kluczowego C#?
Chociaż to pytanie może wydawać się duplikat wielu, to jest rzeczywiście poprosił o konkretnej przyczyny. Wziąć ten kod, na przykład:
Dim n As Integer? = If(True, Nothing, 1)
w tym kodowania, potrójny wyraz powinny wrócimy Nic, ale to ustawienie n 0. Jeżeli to C#, mogę powiedzieć default(int?)
i będzie działać doskonale. Teraz wygląda na to, że będę musiał opuścić trójskładnik i użyć zwykłego bloku If, ale naprawdę chcę użyć potrójnego.
Jeśli nic tak naprawdę nie odpowiada VB.NET do wartości domyślnej C#, jak możesz wyjaśnić to zachowanie?
'Nic" w tym przypadku równa się 'default (int)', ponieważ twój wywnioskowany typ oparty na wyrażeniu to 'int', a nie' int? '. Można to zobaczyć za pomocą 'If (true, Nothing, new Integer? (1))' – Marc
Więc można bezpiecznie powiedzieć, że VB.NET * nie * ma odpowiednik domyślnego C#. Gdyby tak było, mógł użyć inferencji typu, aby stwierdzić, że Nic w tym przypadku nie jest równe wartości domyślnej wartości zerowej, która jest równa Nic, a nie 0. – oscilatingcretin
W sposób pośredni, to jest poprawne. W języku C# 'default' przyjmuje typ, który może być użyty do wywoływania. W VB wydaje się, że "Nic" odgrywa w tym bierną rolę. – Marc