- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试着理解一个类似于这段代码的扩展方法
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;
}
}
但是我得到了这个错误
error CS1109: Extension methods must be defined in a top level static class; PersonExtensions is a nested class
我发现了这个问题 extension-methods-must-be-defined-in-a-top-level-static-class-答案很好。
添加一个命名空间Foo
返回
error CS7021: Cannot declare namespace in script code
roslynpad 似乎在幕后添加了一些东西。那么我如何才能确保我的扩展方法是在顶级静态类中定义的呢?
最佳答案
RoslynPad 使用 Roslyn 的 script language syntax ,它不允许在类中使用扩展方法(因为整个脚本实际上是一个类,而 C# 不允许在嵌套类中使用扩展)。
目前,您唯一的选择(除了使用 #r
指令引用包含扩展类的已编译程序集之外)是将扩展作为顶级方法放置在脚本中。例如:
public static T Get<T>(this Person person, string name)
{
return (T)person.NewFirstName(name);
}
var p = new Person("Tim");
p.LastName = "Meier";
var IsOlivia = p.Get<bool>("Olivia"); // works
PS - 我是 RoslynPad 的作者。
关于c# - 在 RoslynPad 中使用扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40430419/
我想做的是从另一个脚本中引用一个脚本。 实现这一目标的一种方法可能是使用程序集。 RoslynPad 允许将脚本编译为程序集。这是我迄今为止尝试过的。 脚本A,编译为SOME_PATH\thing.d
我试着理解一个类似于这段代码的扩展方法 var p = new Person("Tim"); p.LastName = "Meier"; // reader.Get("IsDerivat"); v
我一直在使用 RoslynCodeEditor 控件,并试图找到一种方法将我的全局对象传递给 RoslynCodeEditor 并在我的脚本中使用智能感知。 有谁知道在使用 RoslynCodeEdi
我是一名优秀的程序员,十分优秀!