你能使用泛型方法GetType()吗?如果不能,如何处理

本文关键字:不能 如果不 处理 何处理 如果 泛型方法 GetType | 更新日期: 2023-09-27 18:26:42

我正在尝试从名为Quickbase的数据库驱动的API读取值。我还试图编写一个非常通用的方法,处理我从数据库调用的属性,在一个名为BaseSettings.cs.的类中设置属性

我不会总是在每个表中都有所有的属性,所以也不会总是知道会有什么属性。例如,一个对象[TaxForm]可能只使用19个可用属性中的4个,另一个对象可能会使用所有属性。

因此,我不是为每个字段编写检查,而是对当前表中的所有字段进行查询,然后查找可以使用反射设置的可用属性和字段名称。

我的问题是,铸造未知类型的值。我如何作为一个变量来实现这一点,显示在下面的方法中。

我做得对吗?还是应该使用一个参数作为要设置的值,然后在从表中下拉每个属性时从quickbase调用中获取值类型,并将其设置为当前对象。

我目前的例子是:

 public virtual void SetProperty(string propertyName, object propertyValue)
    {
        if(String.IsNullOrEmpty(propertyName))
        {
            throw new Exception("Property name cannot be null or empty while setting value from quickbase. Make sure yor query to the API is returning a property name! [Filed Title:Label]");
        }
        else
        {
            try
            {
                // Get the Type object corresponding to MyClass.
                Type myType = typeof(BaseSetting);
                // Get the PropertyInfo object by passing the property name.
                PropertyInfo myPropInfo = myType.GetProperty(propertyName);
                if(myPropInfo)
                {
                    this.GetType().GetProperty(propertyName).SetValue(this, propertyValue as this.GetType().GetProperty(propertyName).GetType();
                }
                // Display the property name.
            }
            catch (NullReferenceException e)
            {
                Console.WriteLine("The property does not exist in our BaseSettings. PLease verify that it exist in the class design, or that the corrct field is being pulled form Quickbase. Error:" + e.Message);
            }
        }
    }

我在哪里设置新值[可以是string,bool,int,etc],这就是我的问题所在。我可以使用如下所示的方法进行转换吗。

if(myPropInfo)
{
     this.GetType().GetProperty(propertyName).SetValue(this, propertyValue as this.GetType().GetProperty(propertyName).GetType());
}

提前感谢!

你能使用泛型方法GetType()吗?如果不能,如何处理

以下是我所做的。我是泛型的新手,并将方法强制转换为类型。

 public virtual void SetProperty(string propertyName, object propertyValue)
    {
        if(String.IsNullOrEmpty(propertyName))
        {
            throw new Exception("Property name cannot be null or empty while setting value from quickbase. Make sure yor query to the API is returning a property name! [Filed Title:Label]");
        }
        else
        {
            try
            {
                // Get the Type object corresponding to MyClass.
                Type myType = typeof(BaseSetting);
                // Get the PropertyInfo object by passing the property name.
                PropertyInfo myPropInfo = myType.GetProperty(propertyName);
                if (myPropInfo != null)
                {
                    this.GetType().GetProperty(propertyName).SetValue(this, propertyValue);
                }

            }
            catch (NullReferenceException e)
            {
                Console.WriteLine("The property does not exist in our BaseSettings. PLease verify that it exist in the class design, or that the corrct field is being pulled form Quickbase. Error:" + e.Message);
            }
        }
    }
相关文章: