返回类的所有属性,而不是null c#

时间:2018-03-07 10:35:30

标签: c# class

我一直在寻找并发现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或空字符串,我会返回值,在这个例子中,我只会返回一个字符串“詹姆斯”。

希望这是有道理的。

3 个答案:

答案 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);

C# Fiddle

答案 2 :(得分:0)

如果你想得到所有非空属性,我建议也不是空字符串:

bootci

产生

  

ABC,5