Я пытаюсь понять метод расширения, подобный этому кодуИспользование методов расширения в RoslynPad
var p = new Person("Tim");
p.LastName = "Meier";
// reader.Get<bool>("IsDerivat");
var IsOlivia = p.Get<bool>("Olivia");
Это мой код внутри RoslynPad:
public static class PersonExtensions
{
public static T Get<T>(this Person person, string name)
{
return (T)person.NewFirstName(name);
}
}
public class Person
{
public Person(string firstName)
{
this.FirstName = firstName;
}
public string FirstName {get; private set;}
public string LastName {get; set;}
public object NewFirstName(string name)
{
this.FirstName = name;
return (object) this.FirstName;
}
}
Но я получаю эту ошибку
ошибка CS1109: методы расширения должны быть определены в старшем статическом уровне класс; PersonExtensions - это вложенный класс
Я нашел этот вопрос extension-methods-must-be-defined-in-a-top-level-static-class- и ответы хорошие.
Добавление namespace Foo
возвращает
ошибка CS7021: Не может объявить пространство имен в коде сценария
Кажется, что roslynpad добавляет вещи за сценой. Итак, как я могу убедиться, что мой метод расширения определен в статическом классе верхнего уровня?
звучит как-то, что вы должны открыть для проблемы github. –
Это возвращает ошибку 'CS7021: невозможно объявить пространство имен в коде скрипта', и есть несколько проблем, связанных с этой ошибкой [4478] (https://github.com/dotnet/roslyn/issues/4478) или [1078] (https: //github.com/scriptcs/scriptcs/issues/1078) – surfmuggle
var IsOlivia = p.Get («Olivia»); неверно кстати –