Правильный способ проверить, что одиночные значения равны Nothing - PullRequest
1 голос
/ 11 ноября 2011

Следующая строка кода выдает предупреждение с помощью Resharper: «Сравнение чисел с плавающей запятой с оператором равенства.Возможная потеря точности при округлении значений. '

Dim samples() As Single

If samples(i) = Nothing Then
    samples(i) = _mPreviousSamples(i)
End If

Каков наилучший способ проверки наличия значения?

Ответы [ 3 ]

4 голосов
/ 11 ноября 2011

Каков наилучший способ проверки наличия значения?

Я думаю, что у вас неверное понятие "Nothing" в отношении типов значений, таких как Single. Для типов значений Nothing более правильно интерпретируется как значение по умолчанию для типа: в случае Single - 0.0.

Если вы хотите узнать, присутствует ли значение с типом значения, вам необходимо сначала инициализировать тип значения, чтобы оно содержало значение, которое в противном случае никогда не может существовать в этом контексте. Для примитивных типов, таких как Single, Nothing редко бывает достаточно хорошим. В случае Single, попробуйте использовать Single.NaN и проверьте значения, используя Single.IsNan()

1 голос
/ 12 ноября 2011
Dim samples As System.Nullable(Of Single) = Nothing
If samples.HasValue Then
    Console.WriteLine(samples.Value)
Else
    Console.WriteLine("samples is Nothing")
End If

РЕДАКТИРОВАТЬ : Точность: В большинстве случаев вы можете использовать Nullable(Of Single) так же, как Single. VB автоматически преобразует его в Single, где это необходимо. В противном случае просто используйте свойство Value, как в примере выше. Вместо Nullable(Of Single) вы также можете написать Single? со знаком вопроса. Вместо проверки свойства samples.HasValue вы также можете проверить samples IsNot Nothing.

Dim samples As Single? = Nothing
If samples Is Nothing Then
    Console.WriteLine("samples is Nothing")
Else
    Console.WriteLine(samples)
End If
1 голос
/ 11 ноября 2011

Я не очень хорошо знаю VB.NET, но в C # я бы сделал что-то вроде float? samples = null;.

Можете ли вы объявить это как обнуляемый как Dim s As System.Nullable(Of Single) = Nothing?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...