using System;
public class Test
{
interface ITest
{
}
class ServiceBase<T>
{
}
class ServiceClient : ServiceBase<ITest>
{
public string Data { get; set; }
}
static string GetFoo2() {
return Execute<ServiceClient, ITest, string>((ServiceClient clnt) => clnt.Data);
}
static TResult Execute<TService, TInterface, TResult>(Func<TService, TResult> fnc)
where TService : ServiceBase<TInterface> /*, IDisposable*/, new()
{
return default(TResult);
}
public static void Main()
{
Test.GetFoo2();
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJaW50ZXJmYWNlIElUZXN0Cgl7Cgl9CgkKCWNsYXNzIFNlcnZpY2VCYXNlPFQ+Cgl7Cgl9CgkKCWNsYXNzIFNlcnZpY2VDbGllbnQgOiBTZXJ2aWNlQmFzZTxJVGVzdD4KCXsKCQlwdWJsaWMgc3RyaW5nIERhdGEgeyBnZXQ7IHNldDsgfQoJfQoJCglzdGF0aWMgc3RyaW5nIEdldEZvbzIoKSB7CiAgICAgICAgIHJldHVybiBFeGVjdXRlPFNlcnZpY2VDbGllbnQsIElUZXN0LCBzdHJpbmc+KChTZXJ2aWNlQ2xpZW50IGNsbnQpID0+IGNsbnQuRGF0YSk7CiAgICAgIH0KCiAgICBzdGF0aWMgVFJlc3VsdCBFeGVjdXRlPFRTZXJ2aWNlLCBUSW50ZXJmYWNlLCBUUmVzdWx0PihGdW5jPFRTZXJ2aWNlLCBUUmVzdWx0PiBmbmMpCiAgICB3aGVyZSBUU2VydmljZSA6IFNlcnZpY2VCYXNlPFRJbnRlcmZhY2U+IC8qLCBJRGlzcG9zYWJsZSovLCBuZXcoKQogICAgewogICAgCXJldHVybiBkZWZhdWx0KFRSZXN1bHQpOwogICAgfQogICAgICAKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCSAgIFRlc3QuR2V0Rm9vMigpOwoJfQp9