标签: roslynpad

在RoslynPad中使用Extension方法

我尝试理解类似于此代码的扩展方法

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是一个嵌套类

我发现这个问题扩展 - 方法 - …

c# roslyn roslynpad

6
推荐指数
1
解决办法
1077
查看次数

从另一个引用一个 RoslynPad 脚本

我想做的是从另一个脚本中引用一个脚本。

实现这一目标的一种方法可能是使用程序集。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)

这给出了以下错误“类型名称‘事物’在‘程序’类型中不存在”。

有没有办法“编译并保存程序集”然后从另一个脚本引用它?或者,是否有更直接的方法在脚本之间进行交叉引用?

roslynpad

4
推荐指数
1
解决办法
579
查看次数

是否可以在RoslynPad RoslynCodeEditor控件中为globalsType的对象全局包含intellisense?

我一直在使用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)

c# roslyn microsoft.codeanalysis roslynpad

1
推荐指数
1
解决办法
427
查看次数

标签 统计

roslynpad ×3

c# ×2

roslyn ×2

microsoft.codeanalysis ×1