Так что я натолкнулся на какое-то очень непонятное поведение родного тернарного оператора на C# сегодня. Тернарный оператор отправляет неверный тип данных методу, который я вызываю. Основной предпосылкой является то, я хочу, чтобы преобразовать десятичное значение в int
если decimalEntry == false
так будут храниться в базе данных в качестве int
Вот код:Нечетное поведение оператора C#
decimal? _repGroupResult = 85.00
int? intValue = null;
bool decimalEntry = false;
if (decimalEntry == false)
{
intValue = (int?) _repGroupResult;
}
Console.WriteLine("Sending to ResultAdd via ternary operator");
RepGBParent.ResultAdd(this.RepInfo.ResultID, decimalEntry ? _repGroupResult : intValue);
Console.WriteLine("Sending to ResultAdd via if statement");
// All other tests - just add the rep group result
if (decimalEntry)
{
RepGBParent.ResultAdd(this.RepInfo.ResultID, _repGroupResult);
}
else
{
RepGBParent.ResultAdd(this.RepInfo.ResultID, intValue);
}
метод, который я звоню ResultAdd
здесь:
public void ResultAdd(int pResultID, object pResultValue)
{
if (pResultValue == null) { return; }
Console.WriteLine(this.TestInfo.TestNum + ": " + pResultValue.GetType());
....
}
Тройной оператор получает decimal
в то время как if
заявление посылает int
. Как показано на выходном коде ниже:
Я считаю себя программистом разумного таланта, и это действительно бросил меня сегодня. Я играл с ним в течение 2-3 часов и выяснил лучший способ опубликовать его здесь, поэтому я не понимаю, что у меня есть.
Пожалуйста, избегайте ответов типа «почему вы так делаете это так». Я просто хочу знать, почему здесь существует разница между тернарным оператором и оператором if.
Единственный пост, который я обнаружил, что был тесно связан был этот один, но это не совсем совпадают:
Bizarre ternary operator behavior in debugger on x64 platform
Я ненавижу, когда люди делают это, если (логическое значение == FALSE). Используйте if (! Bool) !!!! Однако не так плохо, как если бы (bool = true). – JSON
@ JSON - и я ненавижу, когда люди приходят сюда и критикуют код, когда он делает нулевую разницу, если вы используете 'if (! Bool)' или 'if (bool == false)' с точки зрения функциональности. Это личное предпочтение просто и просто, и все это вопрос читаемости. Некоторые люди считают, что '!' Более читабельны, чем '== false', а некоторые нет. Я лично чувствую, что '== false' более прямолинейно понимают при просмотре кода. Легко пропустить один символ '!'. – jaredbaszler