C#如何通过字符串动态设置属性



首先,我不喜欢编程,但可以理解基本概念满足我的需求。

在下面的代码中,我想通过名称"Gold"来设置属性,类似于:

_cotreport.Contract = COTReportHelper.ContractType."Blabalbal"

 protected override void OnBarUpdate()
            {
                COTReport _cotreport = COTReport(Input);
                _cotreport.Contract=COTReportHelper.ContractType.Gold;
                _cotreport.OpenInterestDisplay=COTReportHelper.OpenInterestDisplayType.NetPosition;
                double index = _cotreport.Commercial[0];
                OwnSMA.Set(index);
            } 

我尝试了以下代码,但系统显示:">

对象引用未设置为对象的实例">

请帮忙!

            System.Reflection.PropertyInfo PropertyInfo = _cotreport.GetType().GetProperty("ContractType");
            PropertyInfo.SetValue(_cotreport.Contract,"Gold",null);
            PropertyInfo.SetValue(_cotreport.Contract,Convert.ChangeType("Gold",PropertyInfo.PropertyType),null);

您正试图在_cotreport上设置一个名为"ContractType"的属性,并在_cotreport.Contract上设置其值。这行不通,有两个原因。

  1. 属性名称(根据我在代码中的判断(是Contract,而不是ContractType
  2. 您需要设置_cotreport上的值

试试这个

System.Reflection.PropertyInfo property = _cotreport.GetType().GetProperty("Contract");
property.SetValue(_cotreport, COTReportHelper.ContractType.Gold, new object[0]);

如果您想按名称设置枚举值,那就另当别论了。试试这个

var enumValue = Enum.Parse(typeof(COTReportHelper.ContractType), "Gold");
property.SetValue(_cotreport, enumValue, new object[0]);

PropertyInfo可以是null,如果使用属性名称:Contract,则可能不是。您应该能够直接将COTReportHelper.ContractType.Gold指定为值。您将属性指定为要修改的实例,但PropertyInfo表示,您应该指定应该在其上设置属性值的所属实例。

类似这样的东西:

System.Reflection.PropertyInfo PropertyInfo = _cotreport.GetType().GetProperty("Contract");
PropertyInfo.SetValue(_cotreport, COTReportHelper.ContractType.Gold, null);

此方法设置任何对象的属性值,如果赋值成功则返回true:

public static Boolean TrySettingPropertyValue(Object target, String property, String value)
{
        if (target == null)
            return false;
        try
        {
            var prop = target.GetType().GetProperty(property, DefaultBindingFlags);
            if (prop == null)
                return false;
            if (value == null)
                prop.SetValue(target,null,null);
            var convertedValue = Convert.ChangeType(value, prop.PropertyType);
            prop.SetValue(target,convertedValue,null);
            return true;
        }
        catch
        {
            return false;
        }
    }

相关内容

  • 没有找到相关文章

最新更新