我使用以下代码将当前字段值的当前值更改为
FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
connectionStringField.SetValue(this, connectionString);
但我的查询是获取connectionstringfied的当前值......
我尝试了以下代码
getvalue(obj ss);
等待您宝贵的回应
它会抛出空值
答案 0 :(得分:2)
如果connectionStringField
找到了该字段(即它是基类型并被称为“_sqlConnectionString”,那么它应该只是:
string connectionString = (string)connectionStringField.GetValue(this);
但是,使用反射与非公共领域交谈是不寻常的。
答案 1 :(得分:1)
public static string GetPropertyValue<T>(this T obj, string parameterName)
{
PropertyInfo[] property = null;
Type typ = obj.GetType();
if (listPropertyInfo.ContainsKey(typ.Name))
{
property = listPropertyInfo[typ.Name];
}
else
{
property = typ.GetProperties();
listPropertyInfo.TryAdd(typ.Name, property);
}
return property.First(p => p.Name == parameterName).GetValue(obj, null).ToString();
}
listPropertyInfo是一个缓存以避免反射性能问题
答案 2 :(得分:0)
public static void SetPropertyValue<T>(this T obj, string parameterName, object value)
{
PropertyInfo[] property = null;
Type typ = obj.GetType();
if (listPropertyInfo.ContainsKey(typ.Name))
{
property = listPropertyInfo[typ.Name];
}
else
{
property = typ.GetProperties();
listPropertyInfo.TryAdd(typ.Name, property);
}
if (value == DBNull.Value)
{
value = null;
}
property.First(p => p.Name == parameterName).SetValue(obj,value, null);
}
我对setter使用了相同的技巧