就在这里。我在我的项目中编写了一个宏解析器,它解析特定对象中宏的所有字符串属性。这个想法是您使用反射来迭代对象的属性,并SetValue
在适当的属性上调用方法。
一天的第一件事(对我来说)是为以下内容创建一个扩展方法System.Type
:
public static partial class TypeExtensionMethods
{
public static PropertyInfo[] GetPublicProperties(this Type self)
{
return self.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where((property) => property.GetIndexParameters().Length == 0 && property.CanRead && property.CanWrite).ToArray();
} // eo GetPublicProperties
} // eo class TypeExtensionMethods
然后在对象上使用它(注意,ForEach
是一种扩展方法,但只是简写for each()
:
obj.GetType().GetPublicProperties().ForEach((property) =>
{
if (property.GetGetMethod().ReturnType == typeof(string))
{
string value = (string)property.GetValue(obj, null);
if (value == null)
property.SetValue(obj, string.Empty, null);
}
}