当前位置:  开发笔记 > 编程语言 > 正文

无法在项目C#中使用GetValues和SetValues

如何解决《无法在项目C#中使用GetValues和SetValues》经验,为你挑选了1个好方法。

我想将DataRow转换为Object.我写了一堂课来做这件事.像这样的错误:

No overload for method 'SetValue' takes 2 arguments

No overload for method 'GetValue' takes 1 arguments

但我无法使用GetValues()和SetValues().将项目转换为4.5时.这是工作.我的项目设置平台目标是3.5(必须 - 因为我连接设备必须使用.NET 3.5).

如何解决这个问题?

这是我的代码:

    public DataRowToObject(DataRow row)
    {
        List listProperty = this.GetProperties();
        foreach (PropertyInfo prop in listProperty)
        {
            if (!row.Table.Columns.Contains(prop.Name) ||
                row[prop.Name] == null ||
                row[prop.Name] == DBNull.Value)
            {
                prop.SetValue(this, null);
                continue;
            }

            try
            {
                object value = Convert.ChangeType(row[prop.Name], prop.PropertyType);
                prop.SetValue(this, value);
            }
            catch
            {
                prop.SetValue(this, null);
            }
        }
    }
    public virtual Hashtable GetParameters()
    {
        Type type = this.GetType();
        List listProperty = new List(type.GetProperties());

        Hashtable result = new Hashtable();
        foreach (PropertyInfo prop in listProperty)
        {
            result.Add(prop.Name, prop.GetValue(this));
        }

        return result;
    }

Jcl.. 9

在.NET 4.5中添加PropertyInfo.SetValuePropertyInfo.GetValue不使用索引器时会出现重载.

但它只是传递null给以前版本的indexer参数(使用此和此重载).

所以:

prop.SetValue(this, value, null);

prop.GetValue(this, null);

这应该适用于.NET .3.5(直到最新版本)...实际上对于.NET 2.0及以上版本:-)



1> Jcl..:

在.NET 4.5中添加PropertyInfo.SetValuePropertyInfo.GetValue不使用索引器时会出现重载.

但它只是传递null给以前版本的indexer参数(使用此和此重载).

所以:

prop.SetValue(this, value, null);

prop.GetValue(this, null);

这应该适用于.NET .3.5(直到最新版本)...实际上对于.NET 2.0及以上版本:-)

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有