【问题标题】:How to set Property value using Reflection?如何使用反射设置属性值?
【发布时间】:2013-07-03 20:20:22
【问题描述】:
我尝试构建一个通用方法,它使用反射获取类和设置值并返回一个类类型。
protected static T GetSecureModel<T>(T model)
{
T secureModel = default(T);
foreach (var property in model.GetType().GetProperties())
{
if (string.CompareOrdinal(property.PropertyType.FullName, "System.String") == 0)
{
property.SetValue(property.Name, property.GetValue(model, null).ToString(), null);
}
}
return secureModel;
}
设置值后如何返回一个类?
【问题讨论】:
标签:
c#-4.0
asp.net-mvc-4
generic-programming
system.reflection
【解决方案1】:
好的。我解决它。检查下面的代码,它可能对某人有帮助。
protected static T GetSecureModel<T>(T model)
{
bool secureData = false;
T secureModel = default(T);
foreach (var property in model.GetType().GetProperties())
{
if (property.GetValue(model, null) != null && property.GetValue(model, null).ToString() != _blankGuid && property.GetValue(model, null).ToString() != _zero)
{
if (string.CompareOrdinal(property.PropertyType.FullName, _uniqueIdentifier) == 0)
{
model.GetType().GetProperty(property.Name).SetValue(model, new Guid(Sanitizer.GetSafeHtmlFragment(property.GetValue(model, null).ToString())), null);
}
else if (string.CompareOrdinal(property.PropertyType.FullName, _numeric) == 0)
{
model.GetType().GetProperty(property.Name).SetValue(model, int.Parse(Sanitizer.GetSafeHtmlFragment(property.GetValue(model, null).ToString())), null);
}
else if (string.CompareOrdinal(property.PropertyType.FullName, _string) == 0)
{
model.GetType().GetProperty(property.Name).SetValue(model, Sanitizer.GetSafeHtmlFragment(property.GetValue(model, null).ToString()), null);
}
secureData = true;
}
}
if (secureData)
{
secureModel = model;
}
return secureModel;
}