你能使用泛型方法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());
}
提前感谢!
以下是我所做的。我是泛型的新手,并将方法强制转换为类型。
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);
}
}
}