【问题标题】:PropertyChanged | CallerMemberName | AmbiguousMatchExcpetion属性更改 |来电者姓名 |模糊匹配异常
【发布时间】:2017-05-17 06:42:14
【问题描述】:

我在运行时收到以下错误:AmbiguousMatchExcpetion "Ambiguous Match found."

有人知道是什么原因吗?

public class MyTrimmedClass : Control, INotifyPropertyChanged
{
    public HtUserGroupSetup CurrentUserGroupSetup
    {
        get { return _CurrentUserGroupSetup; }
        set
        {
            if (_CurrentUserGroupSetup != value)
            {
                _CurrentUserGroupSetup = value;
                OnPropertyChanged();
            }
        }
    }
    private HtUserGroupSetup _CurrentUserGroupSetup;


    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}


public class HtUserGroupSetup : HtUserGroup
{
    public new List<HtPermissionSetup> Permissions
    {
        get { return _Permissions; }
        set
        {
            if (_Permissions != value)
            {
                _Permissions = value;
                OnPropertyChanged("Permissions");
            }
        }
    }
    private List<HtPermissionSetup> _Permissions = new List<HtPermissionSetup>();

    public HtUserGroupSetup(HtUserGroup userGroup)
    {
        Name = userGroup.Name;
        Description = userGroup.Description;
    }
}

public class HtUserGroup : HtBaseServiceData
{
    private string _Name = "";
    [DataMember]
    public string Name
    {
        get { return _Name; }
        set
        {
            if (_Name != value)
            {
                _Name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    private string _Description = "";
    [DataMember]
    public string Description
    {
        get { return _Description; }
        set
        {
            if (_Description != value)
            {
                _Description = value;
                OnPropertyChanged("Description");
            }
        }
    }

    private List<HtPermission> _Permissions = new List<HtPermission>();
    [DataMember]
    public List<HtPermission> Permissions
    {
        get { return _Permissions; }
        set
        {
            if (_Permissions != value)
            {
                _Permissions = value;
                OnPropertyChanged("Permissions");
            }
        }
    }
}

public abstract class HtBaseServiceData : INotifyPropertyChanged
{
    protected void OnPropertyChanged(string property)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

截图

堆栈跟踪

System.Reflection.AmbiguousMatchException ist aufgetreten.

HResult=-2147475171 Message=Mehrdeutige Übereinstimmung gefunden。
来源=mscorlib 堆栈跟踪: bei System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] 类型,ParameterModifier[] 修饰符)InnerException:

【问题讨论】:

  • 你应该发布整个异常,包括堆栈
  • @OfirWinegarten postet 它。
  • 请添加全班
  • 您需要添加更多上下文。另外,避免发布屏幕截图。而是发布代码/文本。 stackoverflow.com/help/how-to-ask
  • PropertyChanged 事件的处理程序中最有可能发生错误,因此与 CallerMemberName 无关。但是如果没有完整的堆栈跟踪就很难说(现在发布的内容并不完整,因为只包括最后一次调用)。确保您的类中没有名称相同但大小写不同的属性(例如 CurrentUserGroupSetup 和 currentUserGroupSetup)。

标签: c# wpf reflection callermembername


【解决方案1】:

问题是,HtUserGroupSetup 中的 Permissions 属性隐藏基类 (HtUserGroup) 的 Permissions 属性。

public new List<HtPermissionSetup> Permissions

重命名HtUserGroupSetup 中的Permissions 属性解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2019-05-08
    • 1970-01-01
    相关资源
    最近更新 更多