尝试nameof使用C#从头开始构造表达式SyntaxFactory.Roslyn无法将我识别InvocationExpressionSyntax为上下文nameof关键字,并根据Emit命令抛出错误诊断.
试图给Roslyn有效的代码解析,希望我能找到我的语法结构和"正确解析的"之间的差异.我能够跟踪差异到"nameof"标识符令牌,但那是我被卡住的地方.我发现我的nameof令牌和已解析的令牌之间没有任何区别,但它们仍然有些不同.
当我使用"已解析的"时,一切正常并按Emit预期工作,没有错误.另一方面,当我使用自己的nameof令牌时,它无法编译并Emit抛出错误诊断.
我正在测试代码:
var CODE = "class X { void Q() { var q = nameof(Q); } }";
var correctSyntaxTree = CSharpSyntaxTree.ParseText(CODE);
var correctRoot = correctSyntaxTree.GetRoot();
var correctNameOf = correctRoot.DescendantNodes().OfType<InvocationExpressionSyntax>().First();
var correctExpression = (IdentifierNameSyntax)correctNameOf.Expression;
var myNameOf = SyntaxFactory.InvocationExpression (
correctExpression, //Works
//SyntaxFactory.IdentifierName("nameof"), //Doesn't work
//SyntaxFactory.IdentifierName(SyntaxFactory.Token(SyntaxKind.NameOfKeyword)), //System.ArgumentException: 'identifier'
//SyntaxFactory.IdentifierName(correctExpression.Identifier), //Works
//SyntaxFactory.IdentifierName(correctExpression.Identifier.ValueText), //Doesn't work
//correctExpression.WithIdentifier(SyntaxFactory.Identifier("nameof")), //Doesn't work
//correctExpression.WithIdentifier(SyntaxFactory.Identifier(correctExpression.Identifier.ValueText)), //Doesn't work
//SyntaxFactory.IdentifierName("nameof").WithTriviaFrom(correctExpression), //Doesn't work …Run Code Online (Sandbox Code Playgroud) 在android native活动中,您可以使用自己的方法处理系统中的主要命令。我知道该怎么做,但我不知道我能处理的所有状态。我知道像APP_CMD_SAVE_STATE,APP_CMD_INIT_WINDOW等几种状态...但是那还不是全部。我在任何地方都找不到状态列表或android_native_app_glue.h头文件。有人可以引用我的名字,也可以写下他们的数字和事件清单吗?
谢谢
void CMDMethod(struct android_app* app, int32_t state)
{
switch(state)
{
case APP_CMD_SAVE_STANE: //some code
break;
//what can be next cases?
}
}
void android_main(struct android_app* state)
{
state->onAppCmd = CMDMethod;
}
Run Code Online (Sandbox Code Playgroud)