2017-04-13 2 views
0

eUsersリストオブジェクトをユーザーリストオブジェクトにマップする関数を作成しようとしています。これは、実際にいくつかのプロパティをマップしますが、ときpropertyInfo.Name == "UserName"、それが次の行に私にAmbiguousMatchExceptionをスローされます:私がテストしGetPropertyと2つのオブジェクトを相互にマップしようとするとAmbiguousMatchExceptionが発生する

typeof(User) 
    .GetProperty(ePropertyInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetField) 
    .SetValue(user, ePropertyInfo.GetValue(currentEUser)); 

と、それはGetPropertyメソッドによってトリガされているようです。私は本当に何が起こるかわからない。ここでは、完全な機能は次のとおりです。

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; 
} 

編集:ここでは

は、ユーザーと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; 
    } 
} 
+1

'User'クラスを表示できますか? – stuartd

+0

このBindingFlags.IgnoreCaseを削除しようとしましたか? –

+0

@stuartdはクラスを追加しました –

答えて

4

あなたの基底クラスの1つにUserNameというプロパティをシャドウしていますUserクラスにUserNameと宣言するときにnewというキーワードを使用します。これは、実際にはUserNameという名前のプロパティが複数あることを意味します。基本クラスの元のものとUserの新しいものです。これがAmbiguousMatchExceptionの原因です。

BindingFlags.DeclaredOnlyフラグを使用して、問題のタイプで宣言されたプロパティを取得することを試みてください:User

+0

これは、おかげで、ありがとう! –

関連する問題