我有一个列表,其中包含'Reference'类作为泛型类型。所以我应该能够用'Reference'类的子代填充我的列表,但编译器报告错误:
'naturalCalc.Enginee.Reference'
不包含'Opener'
的定义,并且没有可以找到接受类型'Opener'
的第一个参数的扩展方法'naturalCalc.Enginee.Reference'
(您是否缺少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; } }
}
// The 'ToPostfix' class in which the error is taken place.
class ToPostfix
{
List<Reference> infix = new List<Reference>();
List<Reference> postfix = new List<Reference>();
public ToPostfix(List<Reference> infixForm)
{
this.infix = infixForm;
foreach (Reference item in this.infix)
{
switch ( item.ToString() )
{
case "naturalCalc.Enginee.MyFloat":
this.postfix.Add(item);
break;
case "naturalCalc.Enginee.MyBrackets":
if (item.Opener)
{
this.postfix.Add(item);
}
break;
}
}
}
}
答案 0 :(得分:1)
如果可能,您应该尝试将方法移动到界面中。
如果无法做到这一点,您可以动态测试类型并按如下方式进行转换:
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.
}
答案 1 :(得分:0)
不是一个完整的答案,但我相信你的MyBrackets课程有错误。
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; }
}
}
此致
答案 2 :(得分:0)
您使用List
Reference
,但在Opener
中定义MyBracketClass
属性。如果您希望从Reference
实例访问您的媒体资源,请将其移至那里。