-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Description
using System;
Console.WriteLine(GetTheFooString<FooBar, Base>());
Console.WriteLine(GetTheFooString<FooBar, Mid>());
Console.WriteLine(GetTheFooString<FooBar, Derived>());
Console.WriteLine(GetTheBarString<FooBar, Base>());
Console.WriteLine(GetTheBarString<FooBar, Mid>());
Console.WriteLine(GetTheBarString<FooBar, Derived>());
Console.WriteLine(GetTheFooString<FooBarBaz, Base>());
Console.WriteLine(GetTheFooString<FooBarBaz, Mid>());
Console.WriteLine(GetTheFooString<FooBarBaz, Derived>());
Console.WriteLine(GetTheBarString<FooBarBaz, Base>());
Console.WriteLine(GetTheBarString<FooBarBaz, Mid>());
Console.WriteLine(GetTheBarString<FooBarBaz, Derived>());
static string GetTheFooString<T, U>() where T : IFoo<U> => T.GetString();
static string GetTheBarString<T, U>() where T : IBar<U> => T.GetString();
interface IFoo<in T> { static virtual string GetString() => $"IFoo<{typeof(T).Name}>"; };
interface IBar<out T> { static virtual string GetString() => $"IBar<{typeof(T).Name}>"; };
class FooBar : IFoo<Base>, IBar<Derived> { }
interface IBaz : IFoo<Mid>, IBar<Mid>
{
static string IFoo<Mid>.GetString() => "IBaz";
static string IBar<Mid>.GetString() => "IBaz";
}
class FooBarBaz : FooBar, IBaz { }
class Base { }
class Mid : Base { }
class Derived : Mid { }Expected
Doesn't crash
Actual
IFoo<Base>
IFoo<Base>
IFoo<Base>
IBar<Derived>
IBar<Derived>
IBar<Derived>
IFoo<Base>
Fatal error. Internal CLR error. (0x80131506)
at Program.<<Main>$>g__GetTheFooString|0_0[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]()
at Program.<Main>$(System.String[])
am11