当前位置: 首页 > 知识库问答 >
问题:

C#关键字“this”在当前上下文中不可用

郁明诚
2023-03-14

我有一个接口服务,它有一个方法GoTo

 public interface Service
 {
   bool GoTo(string NextPage , object parameter);
 }

我有一个A类,如下所示

 public class A
 {
    private Service serviceA;

   //constructor of the class
   public A(Service serviceB, ServiceManager serviceManager)
   {
      this.serviceA = serviceB;
   }
   public ObservableCollection<SampleObject> Example { get; } = new 
   ObservableCollection<SampleObject>()
    {
        new SampleObject() { Action=  new DelegateCommand(() => this.serviceA.GoTo("NextPage", null)) 
    },
     
    };

}

我得到一个错误,说关键字“this”在当前上下文中不可用。我看过一个字段初始值设定项不能引用非静态字段、方法或属性,我可以看到错误是由于变量没有在构造函数中初始化,但在我的情况下,我这样做了。如果能帮助理解这一点,我将不胜感激?

共有3个答案

韦衡
2023-03-14
匿名用户

您可以通过声明一个变量(例如< code>this)来保存< code > this 的值来解决这个问题。例如:

var that = this;

然后将其替换为现有代码中的代码

that.serviceA.GoTo("NextPage", null)

您需要将<code>示例varcode。

(这是JavaScript中的一种常见技术,不是因为< code>this永远“不可用”,而是因为< code>this的上下文并不是您希望它出现在您想要使用它的地方。但是在C#中偶尔也会派上用场。)

于嘉许
2023-03-14

this在这个代码中new SampleObject(){Action=new委托命令(()=

不是您问题的确切答案,但将camelCase用于私有字段是一种非常糟糕的做法,即使它符合C#标准约定。.Net 社区中广泛使用的约定是使用前导下划线命名私有字段。例如:私人服务_serviceA;

这种约定有助于避免这种情况的变量命名冲突,并减少使用全局变量与局部变量时的人为错误。

秦俊发
2023-03-14

您在属性初始值设定项中使用了< code>this。你不能这样。您所要做的就是将< code>Example的初始化从声明点移到构造函数体中:

public class A
{
    private Service serviceA;
    public ObservableCollection<SampleObject> Example { get; }

    public A(Service serviceB, ServiceManager serviceManager)
    {
        this.serviceA = serviceB;
        Example = new ObservableCollection<SampleObject>
        {
            new SampleObject
            {
                Action = new DelegateCommand(() => this.serviceA.GoTo("NextPage", null))
            }
        };
    }
}
 类似资料:
  • 在 C# 中,可以使用 this 关键字来表示当前对象,日常开发中我们可以使用 this 关键字来访问类中的成员属性以及函数。不仅如此 this 关键字还有一些其它的用法,下面就通过一些示例来分别演示一下。 1) 使用 this 表示当前类的对象 运行结果如下: 小牛知识库 https://www.xnip.cn/ 2) 使用 this 关键字串联构造函数 运行结果如下: 无参构造函数 小牛知识库

  • 涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 前一章已经提到,this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。 简单说,this就是属性或方法“当前”所在的对象。 this.property 上面代码中,this就代表property属性当前所在

  • 问题内容: 当ai遇到关键字时,我正在研究Java中的方法重写。在Internet和其他来源上进行了大量搜索之后,我得出结论,当实例变量的名称与构造函数的参数相同时,将使用关键字。我是对还是错? 问题答案: 是实例中当前实例的别名或名称。它对于消除实例变量与局部变量(包括参数)的区别很有用,但它本身可以用来简单地引用成员变量和方法,调用其他构造函数重载或简单地引用 实例 。适用用途的一些示例(并非

  • 问题内容: 我试图了解java关键字的this实际作用。我一直在阅读Sun的文档,但对于this实际操作仍然不甚了解。 java 关键字 问题答案: 关键字是对当前对象的引用。 另一种思考方式是关键字就像你用来引用自己的人称代词。对于相同的概念,其他语言使用不同的词。VB使用Me和Python约定(因为Python不使用关键字,只是每个方法的隐式参数)将被使用。 如果要引用本质上属于你的对象,你将

  • 本文向大家介绍C# this关键字的四种用法,包括了C# this关键字的四种用法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下 用法一  this代表当前实例,用this.显式调用一个类的方法和成员 用法二  通过this实现原始类型的扩展(下一篇详解) 用法三  通过this实现索引器,可用于优化程序性能(下一篇详解) 用