// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using System; public struct ValX0 { } public struct ValY0 { } public struct ValX1 { } public struct ValY1 { } public struct ValX2 { } public struct ValY2 { } public struct ValX3 { } public struct ValY3 { } public class RefX0 { } public class RefY0 { } public class RefX1 { } public class RefY1 { } public class RefX2 { } public class RefY2 { } public class RefX3 { } public class RefY3 { } public class GenBase { public virtual Type MyVirtType() { return typeof(GenBase); } } public class Gen : GenBase { public override Type MyVirtType() { return typeof(Gen); } } public class Converter { public bool ToGenBaseOfT(object src, bool invalid, Type t) { try { GenBase dst = (GenBase)src; if (invalid) { return false; } return dst.MyVirtType().Equals(t); } catch (InvalidCastException) { return invalid; } catch { return false; } } public bool ToGenOfT(object src, bool invalid, Type t) { try { Gen dst = (Gen)src; if (invalid) { return false; } return dst.MyVirtType().Equals(t); } catch (InvalidCastException) { return invalid; } catch { return false; } } } public class Test { public static int counter = 0; public static bool result = true; public static void Eval(bool exp) { counter++; if (!exp) { result = exp; Console.WriteLine("Test Failed at location: " + counter); } } public static int Main() { Eval(new Converter().ToGenBaseOfT(new Gen(), false, typeof(Gen))); Eval(new Converter().ToGenOfT(new GenBase(), true, null)); Eval(new Converter().ToGenBaseOfT(new Gen(), false, typeof(Gen))); Eval(new Converter().ToGenOfT(new GenBase(), true, null)); if (result) { Console.WriteLine("Test Passed"); return 100; } else { Console.WriteLine("Test Failed"); return 1; } } }