gpt4 book ai didi

c# - 在 RoslynPad 中使用扩展方法

转载 作者:太空狗 更新时间:2023-10-29 20:56:13 27 4
gpt4 key购买 nike

我试着理解一个类似于这段代码的扩展方法

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com