Я пытаюсь выяснить, является ли переменная простой: bool
или Nullable<bool>
.
Кажется, что
if(val is Nullable<bool>)
возвращает true для переменных bool
и Nullable<bool>
и
if(val is bool)
также возвращает true для bool
и Nullable<bool>
.
В принципе, мне интересно узнать, является ли простая переменная bool
истиной ИЛИ, если переменная Nullable<bool>
не равна нулю.
Каким образом это сделать?
Вот полный код:
List<string> values = typeof(InstViewModel).GetProperties()
.Where(prop => prop != "SubCollection" && prop != "ID" && prop != "Name" && prop != "Level")
.Select(prop => prop.GetValue(ivm, null))
.Where(val => val != null && (val.GetType() != typeof(bool) || (bool)val == true)) //here I'm trying to check if val is bool and true or if bool? and not null
.Select(val => val.ToString())
.Where(str => str.Length > 0)
.ToList();
Объект InstViewModel
:
public class InstViewModel
{
public string SubCollection { get; set; }
public string ID { get; set; }
public string Name { get; set; }
public string Level { get; set; }
public bool Uk { get; set; }
public bool Eu { get; set; }
public bool Os { get; set; }
public Nullable<bool> Mobiles { get; set; }
public Nullable<bool> Landlines { get; set; }
public Nullable<bool> UkNrs { get; set; }
public Nullable<bool> IntNrs { get; set; }
}
Точка моего кода здесь заключается в том, чтобы узнать, являются ли все значения объекта null
(точнее, для определения любых значений, которые не являются нулевыми, и сохраняют их в List<string>
). Это представляет собой усложнение в выражении лямбда, однако, при попытке различить типы bool
и bool?
в моем объекте (второй оператор Where
).
Кроме того, поскольку объект также содержит некоторые типы строк, я пытаюсь исключить их в первом операторе .Where
(который, вероятно, сейчас не работает правильно, поскольку он, похоже, не работает). Но моя главная цель - различать типы bool
и bool?
.