Можно создать дубликат:
Bug?? If you assign a value to a nullable integer via a ternary operator, it can't become nullЧто такое эквивалент VB.NET ключевого слова по умолчанию C#?
Хотя этот вопрос может показаться дубликата многих, это на самом деле спрашивают по определенной причине. Возьмите этот код, например:
Dim n As Integer? = If(True, Nothing, 1)
В этом коде, тройное выражение должны быть возвращающимся Ничего, но это настройка п 0. Если это C#, я мог бы сказать default(int?)
и он будет работать отлично. Теперь похоже, что мне придется вырвать тройку и использовать обычный блок If, но я действительно хочу использовать тройной.
Если ничто не было действительно эквивалентом VB.NET по умолчанию для C#, как вы можете объяснить это поведение?
«Ничего» в этом экземпляре не соответствует 'default (int)', потому что ваш предполагаемый тип на основе выражения 'int', а не' int? '. Это можно увидеть с помощью 'If (true, Nothing, new Integer? (1))' – Marc
Итак, можно с уверенностью сказать, что VB.NET * не имеет эквивалента C# по умолчанию. Если бы это было так, он мог бы использовать вывод типа, чтобы определить, что Nothing в этом случае равно значению по умолчанию для значения NULL-значения, которое равно Nothing, а не 0. – oscilatingcretin
Косвенным образом это правильно. В C# значение 'default' принимает тип, который можно использовать для inferrence. В VB кажется, что 'Nothing' играет пассивную роль в этом. – Marc