我在尝试使Func<T>
表达式评估对象实例中的属性时遇到了一些困难,例如
var t = new Transition<ILexeme>( 1, () => TokenType == eToken.TOKEN_COMMENT );
Visual Studio 编译器抱怨非静态字段、方法或属性“ILexeme.TokenType.get”错误需要对象引用,因为它需要一个ILexeme
对象实例。
我正在尝试做的是创建一个状态机,用于Func<T>
调用转换函数的委托,该委托会测试该eToken
属性的值是否与eToken
令牌流中的值匹配。如果相等,则机器进入下一个状态。
问题是我ILexeme
作为泛型类型传入Transition
类,但我希望转换函数使用泛型类型中的属性,即TokenType
. 我的问题是如何实现这一点,记住它必须适用于值类型,即char
,int
等?
以下是 ILexeme 的定义:
public interface ILexeme
{
eToken TokenType { get; }
String TokenString { get; }
}
这是ILexeme的具体实现:
public enum eToken : int
{
TOKEN_COMMENT,
TOKEN_SEPARATOR
}
public class Token : ILexeme
{
public eToken TokenType { get; }
public String TokenString { get; }
}
这是过渡的定义:
public readonly int FromState;
public readonly int ToState;
public readonly Func<T> Input;
public Transition( int fromState, Func<T> input, int toState )
{
this.FromState = fromState;
this.ToState = toState;
this.Input = input;
}