예제 #1
0
파일: Reference.cs 프로젝트: brikken/Tests
 private static void WalkReferences(ReferenceTest @ref, IList <ReferenceTest> refs)
 {
     if (refs.Contains(@ref))
     {
         throw new Exception($"Circular reference ({refs.Last().Id} referenced {@ref.Id} which was element {refs.IndexOf(@ref)} in the stack)");
     }
     refs = refs.Append(@ref).ToList();
     WalkReferences(@ref.Ref, refs);
 }
예제 #2
0
파일: Program.cs 프로젝트: brikken/Tests
        static void Main(string[] args)
        {
            var refA = new ReferenceTest()
            {
                Id = 1
            };
            var refB = new ReferenceTest()
            {
                Id = 2, Ref = refA
            };
            var refC = new ReferenceTest()
            {
                Id = 3, Ref = refB
            };

            refA.Ref = refC;
            try
            {
                Reference.CheckCircular(refA);
            }
            catch (Exception e)
            {
                Console.WriteLine($"Caught circular reference exception: {e.Message}");
            }

            var refVal = new ReferenceValidator <ReferenceTest>(r => r.Ref, refA);

            try
            {
                refVal.Validate();
            }
            catch (CircularReferenceException e)
            {
                Console.WriteLine($"Caught CircularReferenceException: {e.Message}");
            }
        }
예제 #3
0
파일: Reference.cs 프로젝트: brikken/Tests
        public static void CheckCircular(ReferenceTest initial)
        {
            var refs = new List <ReferenceTest>();

            WalkReferences(initial, refs);
        }