我一直在寻找并发现describes to return a bool if value is null。我正在使用的代码来自此代码段 客户端客户端=新客户端{FirstName =“James”};
1px
但是如果值为null或不是(bool),我想检索它们不为空的所有属性值,而不是返回。
我尝试过更改代码,但不成功。
非常感谢
修改
client.GetType().GetProperties()
.Where(pi => pi.GetValue(client) is string)
.Select(pi => (string) pi.GetValue(client))
.Any(value => string.IsNullOrEmpty(value));
使用我的'Client'类,我想迭代我的类中的所有属性,并且值不为null或空字符串,我会返回值,在这个例子中,我只会返回一个字符串“詹姆斯”。
希望这是有道理的。
答案 0 :(得分:4)
有一些问题:
return myObject.GetType().GetProperties()
.Where(pi => pi.GetValue(myObject) is string) // this wastes time getting the value
.Select(pi => (string) pi.GetValue(myObject))
.Any(value => string.IsNullOrEmpty(value)); // Any will return a bool
所以改为:
return myObject.GetType().GetProperties()
.Where(pi => pi.PropertyType == typeof(string)) // check type
.Select(pi => (string)pi.GetValue(myObject)) // get the values
.Where(value => !string.IsNullOrEmpty(value)); // filter the result (note the !)
另外,请确保您的属性是属性而不是字段。
答案 1 :(得分:0)
使用Where
代替Any
。此外,您在!
错过了!string.IsNullOrEmpty(value)
。
我修改了你的代码以返回一个字典,其中的属性值由name索引。
var stringPropertyValuesByName = client.GetType().GetProperties()
.Where(pi => pi.PropertyType == typeof(string)) // use type check as Steve Harris suggested
.Select(pi => new { Val = (string) pi.GetValue(client), Name = pi.Name })
.Where(pi => !string.IsNullOrEmpty(pi.Val))
.ToDictionary(pi => pi.Name, pi => pi.Val);
答案 2 :(得分:0)
如果你想得到所有非空属性,我建议也不是空字符串:
bootci
产生
ABC,5