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;
}