程序'{prgrmnm}'已退出,代码为-2147023895(0x800703e9)

时间:2017-09-27 16:25:44

标签: c# generics runtime-error

很可能这是一件非常简单的事情,但我现在并不是真的理解它:

我有一些接口定义和一些基本实现,如:

    public interface IA
    {
        IB B { set; get; }
    }

    public interface IB
    {
        IA A { set; get; }
    }

    public class TheA<T> : NotifyPropertyChangedBase, IA
    {
        public TheA()
        {
            var t = typeof(T);
        }

        public IB B { set; get; }
    }

    public class TheB : NotifyPropertyChangedBase, IB
    {

        public TheB(IA a)
        {
            A = a;
        }

        public IA A { set; get; }
    }

我在退出代码0x800703e9时收到此错误消息,当我在Visual Studio(2015 Update 3)下使用这些类时,因为它是调试器问题,项目和构建信息:.Net fw.4.5.2,debug ,x86)就像这里:

    static void Main(string[] args)
    {
        var a = new TheA<int>();
        a.B = new TheB(a); // After this line the program fails, while debugging.
    }

我已将generics标记添加到此问题中,因为此错误仅在我添加泛型参数后才出现。

问题: 是什么导致“程序'{prgrmnm}'已退出代码-2147023895(0x800703e9)。”错误在此示例中?

更新: 此错误应该是Visual Studio环境错误。由于代码本身运行。仅当VS尝试评估实例a时,它才会失败。

更新II : 首先我认为继承没有相关性,因为没有直接调用,但调试器调用它。

    public abstract class NotifyPropertyChangedBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public override string ToString()
        {
            var s = new StringBuilder();

            foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(this))
            {
                string name = descriptor.Name;
                object value = descriptor.GetValue(this);
                s.AppendLine(string.Format("{0}={1}", name, value)); // This calls recursively itself... Ok 
            }
            return s.ToString();
        }
    }

谢谢你的谈话。

0 个答案:

没有答案