reflection - Correctly distinguish between bool? and bool in C# -
i trying find out if variable either simple bool or nullable<bool>.
it seems that
if(val nullable<bool>) returns true both bool , nullable<bool> variables and
if(val bool) also returns true both bool , nullable<bool>.
basically, interesting in finding out if simple bool variable true or if nullable<bool> variable not null.
what's way this?
here full code:
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 check if val bool , true or if bool? , not null .select(val => val.tostring()) .where(str => str.length > 0) .tolist(); the instviewmodel object:
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; } } the point of code here find out if of object's values null (more specifically, find out values not null , save them in list<string>). presents complication in lambda expression, however, when trying distinguish between bool , bool? types in object (second where statement).
additionally, since object contains string types well, trying exclude in first .where statement (which not doing right @ present doesn't seem working). main goal distinguish between bool , bool? types.
code getting class instance values:
// create class instance instviewmodel model = new instviewmodel() { uk = true, uknrs = false, }; // check boolean fields false or null bool isallnullorfalse = (from property in typeof(instviewmodel).getproperties() let type = property.propertytype let isbool = type == typeof(bool) isbool || type == typeof(bool?) let value = property.getvalue(model) select value == null || (isbool && bool.equals(value, false))).all(e => e); console.writeline("all values null or false = {0}", isallnullorfalse);
Comments
Post a Comment