【发布时间】:2010-10-23 21:54:58
【问题描述】:
我正在尝试创建一个方法,该方法将遍历泛型对象列表并替换其所有类型为 string 的属性,该属性要么为 null,要么为空。
如何做到这一点的好方法?
到目前为止,我有这种...外壳...:
public static void ReplaceEmptyStrings<T>(List<T> list, string replacement)
{
var properties = typeof(T).GetProperties( -- What BindingFlags? -- );
foreach(var p in properties)
{
foreach(var item in list)
{
if(string.IsNullOrEmpty((string) p.GetValue(item, null)))
p.SetValue(item, replacement, null);
}
}
}
那么,我如何找到一个类型的所有属性:
-
类型为
string -
已公开
get -
已公开
set?
我做了这个测试类:
class TestSubject
{
public string Public;
private string Private;
public string PublicPublic { get; set; }
public string PublicPrivate { get; private set; }
public string PrivatePublic { private get; set; }
private string PrivatePrivate { get; set; }
}
以下不起作用:
var properties = typeof(TestSubject)
.GetProperties(BindingFlags.Instance|BindingFlags.Public)
.Where(ø => ø.CanRead && ø.CanWrite)
.Where(ø => ø.PropertyType == typeof(string));
如果我打印出我到达那里的那些属性的名称,我会得到:
公共公共 公私 私人公共
换句话说,我得到的两个属性太多了。
注意:这可能会以更好的方式完成...使用嵌套的 foreach 和反射等等...但是如果您有任何好的替代想法,请告诉我知道因为我想学习!
【问题讨论】:
标签: c# reflection