Опитвам се да прочета стойности от API, управляван от база данни, наречен Quickbase. Също така се опитвам да напиша много общ метод, който да обработва свойства, които извиквам от базата данни, да задавам свойства в клас, наречен BaseSettings.cs.
Няма винаги да имам всички свойства във всяка таблица, така че не винаги ще знам какви свойства влизат. Например един обект [TaxForm] може да използва само 4 от 19-те налични свойства, а друг може да използва всички.
Така че вместо да пиша проверки за всяко едно, правя заявка за всички полета в текущата таблица и след това намирам какви налични свойства мога да задам, използвайки отражение, и името на полето.
Въпросът ми е кастинг на стойностите на неизвестни типове. Как мога да направя това като променлива, показана в метода по-долу.
Правилно ли го правя, или трябва да използвам параметър като стойност, която трябва да се зададе, и след това да получа типа на стойността от извикването на 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, ect], е въпросът ми. Мога ли да кастя, използвайки метод, както е показано по-долу, или не.
if(myPropInfo)
{
this.GetType().GetProperty(propertyName).SetValue(this, propertyValue as this.GetType().GetProperty(propertyName).GetType());
}
Благодаря предварително!
if(myPropInfo)
? имаш предвидif(myPropInfo != null)
? - person Selman Genç   schedule 16.10.2014След инсталиране на кристални отчети, ако не се показва в отчетите в кутията с инструменти, щракнете с десния бутон върху Отчитане в кутията с инструменти и изберете Избор на елементи, ще се отвори прозорец. В този прозорец изберете компоненти на .NET Framework, той ще обнови списъка, проверете списъка необходими CrystalReportSource, CrystalReportSource и т.н. Сега можете да видите инструментите за кристални отчети в кутията с инструменти в менюто за отчитане.
- person Ben Robinson   schedule 16.10.2014