获取当前值反射c#

时间:2012-11-08 09:46:32

标签: c# .net reflection connection-string

我使用以下代码将当前字段值的当前值更改为

FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);  

connectionStringField.SetValue(this, connectionString);  

但我的查询是获取connectionstringfied的当前值......

我尝试了以下代码

getvalue(obj ss);

等待您宝贵的回应

它会抛出空值

3 个答案:

答案 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使用了相同的技巧