J'essaie de créer une fonction qui mappe un objet de liste eUsers à un objet de liste d'utilisateurs. Il tracera fait quelques propriétés, mais quand propertyInfo.Name == "UserName"
, ça va me jeter un AmbiguousMatchException
sur la ligne suivante:C# AmbiguousMatchException lorsque GetProperty et essayant de mapper deux objets les uns avec les autres
typeof(User)
.GetProperty(ePropertyInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetField)
.SetValue(user, ePropertyInfo.GetValue(currentEUser));
Je l'ai testé et il semble qu'il soit déclenché par la méthode GetProperty. Je ne suis pas vraiment sûr de ce qui pourrait causer ça. Voici la fonction complète:
private List<User> ConvertEUsersToUsers(List<eUser> eUsers)
{
List<User> users = new List<User>();
User user = null;
IList<PropertyInfo> eUserProps = new List<PropertyInfo>(eUsers.FirstOrDefault().GetType().GetProperties());
IList<PropertyInfo> userProps = typeof(User).GetProperties();
foreach (eUser currentEUser in eUsers)
{
user = new User();
foreach (PropertyInfo ePropertyInfo in eUserProps)
{
foreach (PropertyInfo propertyInfo in userProps)
{
if (propertyInfo.Name == ePropertyInfo.Name)
{
if (ePropertyInfo.CanWrite)
{
typeof(User)
.GetProperty(ePropertyInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetField)
.SetValue(user, ePropertyInfo.GetValue(currentEUser));
}
break;
}
}
}
users.Add(user);
}
return users;
}
EDIT:
Voici une partie de la classe utilisateur et Euser:
[Serializable]
[Application(7)]
[Table("Users")]
public partial class User : MembershipUser, IPrincipal, IIdentity, IEntity, IIdNameClass {
[Column("Name")]
public new EntityField UserName { get; set; }
}
[Table("Users")]
public class eUser : User
{
[NotMapped]
public Boolean selected { get; set; }
public new UserTypes UserType { get; set; }
public eUser() : base()
{
selected = false;
}
}
Pouvez-vous montrer la classe 'User'? – stuartd
Avez-vous essayé de supprimer ce BindingFlags.IgnoreCase? –
@stuartd a ajouté les classes –