C# 编译器错误:无法识别属性
我有一个列表,其中包含作为泛型类型的“Reference”类。因此,我应该能够用“Reference”类的子类填充列表,但编译器报告了一个错误:C# 编译器错误:无法识别属性,c#,class,generics,C#,Class,Generics,我有一个列表,其中包含作为泛型类型的“Reference”类。因此,我应该能够用“Reference”类的子类填充列表,但编译器报告了一个错误: 'naturalCalc.engee.Reference'不包含'Opener'的定义,并且找不到接受类型为'naturalCalc.engee.Reference'的第一个参数的扩展方法'Opener'(是否缺少using指令或程序集引用?)(CS1061)ToPostfix.cs:27,34 “ToPostfix”类中的开关代码确保在第二种情况下该
'naturalCalc.engee.Reference'
不包含'Opener'
的定义,并且找不到接受类型为'naturalCalc.engee.Reference'
的第一个参数的扩展方法'Opener'
(是否缺少using指令或程序集引用?)(CS1061)ToPostfix.cs:27,34
“ToPostfix”类中的开关代码确保在第二种情况下该项具有“Opener”属性
// The 'MyBrackets' class which contains the 'Opener' property.
public class MyBrackets : naturalCalc.Enginee.Reference
{
private bool opener;
public MyBrackets( bool opener )
{
this.opener = opener;
}
public bool Opener { get { return this.Opener; } }
}
//发生错误的“ToPostfix”类。
类ToPostfix
{
列表中缀=新列表();
列表后缀=新列表();
公共拓扑修复(列表infixForm)
{
this.infix=infixForm;
foreach(此中缀中的参考项)
{
开关(item.ToString())
{
案例“naturalCalc.Enginee.MyFloat”:
this.postfix.Add(项目);
打破
案例“naturalCalc.Engineee.My括号”:
如果(项目开始)
{
this.postfix.Add(项目);
}
打破
}
}
}
}
如果可能,您应该尝试将该方法移动到接口中
如果这是不可能的,您可以按如下方式动态测试类型并强制转换:
Opener opener = item as Opener;
if (opener != null)
{
if (opener.Opener)
{
this.postfix.Add(item);
}
}
而且你的getter也不能正常工作。您还应该学习使用自动实现的属性:
public class MyBrackets : naturalCalc.Enginee.Reference
{
public MyBrackets(bool opener)
{
this.Opener = opener;
}
public bool Opener { get; private set; } // Auto-implemented property.
}
这不是一个完整的答案,但我相信你的MyBracks类有一个错误。
opener
和opener
是不同的属性
我认为应该是:
public class MyBrackets : naturalCalc.Enginee.Reference
{
public MyBrackets(bool opener)
{
this.Opener = opener;
}
public bool Opener
{
private set { this.Opener = value; }
get { return this.Opener; }
}
}
关于您使用的是
参考
的列表
,但在MyBracketClass
中定义了Opener
属性。如果希望从引用
实例访问属性,请将其移动到该实例。OP只需在获取
中使用小写的开瓶器
public bool-Opener{get{返回this.Opener;}}
@Kevin-yes,这就足够了=)
public class MyBrackets : naturalCalc.Enginee.Reference
{
public MyBrackets(bool opener)
{
this.Opener = opener;
}
public bool Opener
{
private set { this.Opener = value; }
get { return this.Opener; }
}
}