我收到的错误信息似乎无法弄明白。我发现还有很多其他类似的问题,但解决方案对我来说似乎没有用。
错误讯息:
'PaymentPlanStoreLogic.Class1.myLog' is a 'field' but is used like a 'type'
我的代码:
using System;
using PaymentPlanLogic;
namespace PaymentPlanStoreLogic
{
public class Class1
{
Logger myLog = new Logger();
myLog.createLog();
}
}
对象浏览器:
public void createLog()
Member of PaymentPlanLogic.Logger
我按照页面上的建议尝试了以下操作 (object) is a 'field' but is used like a 'type'
PaymentPlanLogic.Logger.createLog();
但是我收到了错误
"'PaymentPlanLogic.Logger.createLog()' is a 'method' but is used like a 'type'"
答案 0 :(得分:23)
您无法在方法之外的字段上调用方法:
using System;
using PaymentPlanLogic;
namespace PaymentPlanStoreLogic
{
public class Class1
{
Logger myLog = new Logger();
void YouForgotThisMethod()
{
myLog.createLog();
}
}
}
答案 1 :(得分:15)
此时唯一合法的事情是类,接口,结构,枚举,字段,运算符,索引器,事件,属性,方法,构造函数和析构函数的声明。它不能是类,接口,结构或枚举,因为它们都有一个关键字。它不能是构造函数或析构函数。因此,用户必须尝试创建字段,运算符,索引器,事件,属性或方法。所有这些事情都可以合法地从一种类型开始。好的,所以这个表达式必须试图识别一个类型。但它没有识别出一种类型;它标识一个字段。所以这就是我给出的错误。
当然这是编译器的一种不合理的拟人化,但你要明白:编译器的错误代码的“心理模型”与你在编写损坏的代码时的想法非常不同,所以错误信息是不是很有帮助。 编译器认为你知道一个语句不能去那里,并且混淆了一个带有类型的字段。一个更复杂的算法会让编译器猜测,因为你输入的是一个法律声明,真正的错误是该语句在一个块之外。
编写错误消息生成器,可以准确地模拟编写损坏代码的人的心理过程非常困难。
答案 2 :(得分:2)
Class1
的定义不完整。你不能在类中调用这个方法,你可以在类的方法中调用它:
using System;
using PaymentPlanLogic;
namespace PaymentPlanStoreLogic
{
public class Class1
{
#region Members
Logger myLog;
#endregion
#region Constructors
public Class1()
{
myLog = new Logger();
myLog.createLog();
}
#endregion
}
}
然后createLog()
将在实例化Class1的新实例时执行。