J'ai écrit le code suivant pour gérer les paramètres de mappage de ma base de données à mes types de données (croyez-moi, je voudrais pouvoir utiliser un ORM std mais ce n'est pas faisable pour de nombreuses raisons)Comment définir un paramètre tout en utilisant l'expression <Func<T>>
public void LoadDatabaseValue<T>(DataTable partData, string identifier, string mappingName, Expression<Func<T>> mappingProperty)
{
var partAttributeValue = mappingProperty.Name;
var memberExpression = (MemberExpression)mappingProperty.Body;
var prop = (PropertyInfo)memberExpression.Member;
try
{
var selectedRow = partData.Select($"partattributename = '{mappingName}'");
var selectedValue = selectedRow[0]["PartAttributeValue"];
var typedOutput = (T)Convert.ChangeType(selectedValue, typeof(T));
prop.SetValue(memberExpression.Expression, typedOutput, null);
}
catch (Exception exception)
{
_databaseImportError = true;
// code to log this error
}
Lorsque je tente d'exécuter ce que je reçois l'exception suivante
{System.Reflection.TargetException: Object does not match target type.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) }
Quand je débugger mes lignes typedOutput avec mon type de propriété, donc je ne sais pas pourquoi il jette cette exception.
J'appelle avec par exemple
LoadDatabaseValue(partData, identifier, "Offset",() => Offset);
Vous passez un 'Func' mais attend que ce soit' expression> '. Changez l'un d'entre eux au même type. –
Venky
@Venky Il passe dans une expression. – Servy