Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#类字段声明中的此运算符_C# - Fatal编程技术网

C#类字段声明中的此运算符

C#类字段声明中的此运算符,c#,C#,这是一个纯粹的学术问题——我已经找到了一个足够容易的解决方法 在将VB.Net类移植到C#时,我在一个类中发现了一个字段的声明,该类在new()语句中将this关键字用作参数。编译器说“关键字‘this’在当前上下文中不可用”(VB编译器认为这种状态没有问题)。我通过将字段的初始化移到类的构造函数中,轻松地解决了这个问题 编辑:在阅读注释后,我添加了以下代码块 public class cTransactions { private List Trans = n

这是一个纯粹的学术问题——我已经找到了一个足够容易的解决方法

在将VB.Net类移植到C#时,我在一个类中发现了一个字段的声明,该类在new()语句中将this关键字用作参数。编译器说“关键字‘this’在当前上下文中不可用”(VB编译器认为这种状态没有问题)。我通过将字段的初始化移到类的构造函数中,轻松地解决了这个问题

编辑:在阅读注释后,我添加了以下代码块

    public class cTransactions
    {
        private List Trans = new List();
        private List Archive = new List();
        private cDDs Debits = new cDDs(this); // complier error 
                                            //Keyword 'this' is not available in the current context
        private string path = Directory.GetCurrentDirectory() + "\";
        private bool dirty = false;
        private int LastID;
        // followed by Property declarations, ctor, methods etc.
        //...
    }
    

然而,在类构造函数执行之前,我找不到任何对关键字“this”的引用(尽管我可能在500多页的语言规范中遗漏了这个启示).是这种情况,还是我应该在字段声明之前查看其中一行中的错误?

查看第7.6.7节:

7.6.7此访问

A仅在实例块中允许此访问 构造函数、实例方法或实例访问器……(细节省略)。。。 在主表达式中,在上下文以外的上下文中使用 上面列出的是编译时错误。特别是,它不是 可以在静态方法、静态属性中引用它 访问器,或在字段声明的变量初始值设定项中


因此,在上面的示例中,在变量初始值设定项中使用它是一个编译时错误。要修复它,请将初始化移到构造函数中。

没有“this”“vb.net中的关键字事实上,在这方面存在一些编译器错误-尽管我记不起具体细节。也许最好的办法是发布一行有问题的代码。@MUG4N-我没有明确地写下VB.Net以上述方式使用关键字me没有问题。欢迎使用!如果每个人都阅读他们应该阅读的每一篇文档,那么我就不会麻烦回答关于阅读语言规范等的snipes了!因此,批评一个初学者在问一个简单的问题之前没有阅读一个500页的文档是有点过分的!你能把VB.NET的原始代码贴在你看到的地方吗?谢谢你,阿克顿。我确实阅读了本节,但没有意识到字段声明实际上在指定的块之外。我的错。再次感谢。