我尝试理解类似于此代码的扩展方法
var p = new Person("Tim");
p.LastName = "Meier";
// reader.Get<bool>("IsDerivat");
var IsOlivia = p.Get<bool>("Olivia");
Run Code Online (Sandbox Code Playgroud)
这是我在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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
错误CS1109:扩展方法必须在顶级静态类中定义; PersonExtensions是一个嵌套类
我发现这个问题扩展 - 方法 - …
我想做的是从另一个脚本中引用一个脚本。
实现这一目标的一种方法可能是使用程序集。RoslynPad 允许将脚本编译为程序集。这是我迄今为止尝试过的。
脚本A,编译为SOME_PATH\thing.dll
class Thing
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
脚本 B
#r "SOME_PATH\thing.dll"
using static Program;
var t = new Thing();
t.Name = "TEST";
t.Name.Dump();
Run Code Online (Sandbox Code Playgroud)
这给出了错误“找不到类型或命名空间'Thing'...”所以我尝试了以下操作。
#r "SOME_PATH\thing.dll"
var t = new Program.Thing();
t.Name = "TEST";
t.Name.Dump();
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误“类型名称‘事物’在‘程序’类型中不存在”。
有没有办法“编译并保存程序集”然后从另一个脚本引用它?或者,是否有更直接的方法在脚本之间进行交叉引用?
我一直在使用RoslynCodeEditor控件并试图找到一种方法将我的全局对象传递给RoslynCodeEditor并在我的脚本中有intellisense.
有没有人知道在使用RoslynCodeEditor控件编辑脚本时如何授予对上下文对象属性或方法的访问权限?
MyContext context = new MyContext();
context.Data = data;
ScriptOptions scriptOptions = ScriptOptions.Default;
scriptOptions = scriptOptions.WithReferences(ReferencesAndImports.References);
scriptOptions = scriptOptions.WithImports(ReferencesAndImports.Imports);
var scriptState = await CSharpScript.EvaluateAsync<string>("int i = 0;", scriptOptions, context, typeof(MyContext));
Run Code Online (Sandbox Code Playgroud)