Посмотрите на следующее, которое демонстрирует мою проблему с компилятором Visual Studio 2017
public interface IFoo
{
string Key { get; set; }
}
public class Foo : IFoo
{
public string Key { get; set; }
}
class Program
{
static void Main(string[] args)
{
PrintFoo(new Foo() { Key = "Hello World" });
Console.ReadLine();
}
private static void PrintFoo<T>(T foo) where T : IFoo
{
//set breakpoint here and try to look at foo.Key
Console.WriteLine(foo.Key);
}
}
Когда я делаю PrintFoo
останова внутри метода PrintFoo
и хочу посмотреть на свойство Key
foo
Visual Studio не предоставит мне всплывающую подсказку. Добавив foo.Key
в окно просмотра, я получаю следующую ошибку:
ошибка CS1061: "T" не содержит определения для "Key", и метод расширения "Key", принимающий первый аргумент типа "T", не найден (отсутствует директива using или ссылка на сборку?)
Когда я изменяю обобщенное объявление на Foo
вместо IFoo
компилятор может получить доступ к свойству 'Key', вот так:
private static void PrintFoo<T>(T foo) where T : Foo
{
//set breakpoint here and try to look at foo.Key
Console.WriteLine(foo.Key);
}
Есть ли способ заставить его работать?
Редактировать:
Работает как просмотр локального окна, так и наведение foo
на foo
чтобы получить подсказку, а затем расширение свойств.
Добавление foo.Key
в окно просмотра или запись ?foo.Key
в непосредственное окно приводит к упомянутой ошибке, и вы не получите всплывающую подсказку при наведении мыши на Key
of foo.Key
Протестировано с Visual Studio 2015, 2017.