我在这个问题中遇到了运算符解析的问题(查看这个.NET fiddle)。
总之,我的代码如下:
bool a = 3 > 5;
namespace System
{
public struct Int32
{
public static extern bool operator > (int a, int b);
}
public struct Boolean { }
}
但是当我在运算符声明上使用GetDeclaredSymbol
时,它给了我一个不同的IMethodSymbol
,而当我在第一行中使用它时(bool a = 3 > 5;
)。
我正在寻找类似于GetDeclaredSymbol
的方法,但它将生成与代码中声明相同的符号。
实际
GetDeclaredSymbol
->SourceUserDefinedOperatorSymbol
GetSymbolInfo
->SynthesizedIntrinsicOperatorSymbol
期望
GetDeclaredSymbol
->SynthesizedIntrinsicOperatorSymbol
GetSymbolInfo
->SynthesizedIntrinsicOperatorSymbol
基本上,我需要一种方法将SourceUserDefinedOperatorSymbol
转换为SynthesizedIntrinsicOperatorSymbol
。
例如:
public static IMethodSymbol GetDeclaredSymbol (OperatorDeclarationSyntax ods)
{
IMethodSymbol opSym = model.GetDeclaredSymbol(ods) ?? throw E;
if (opSym is SourceUserDefinedOperatorSymbol)
{
// convert it to a SynthesizedIntrinsicOperatorSymbol instead
}
}
usedSymbol
) 是BuitlInOperator
的类型,而declaredSymbols
是UserDefinedOperator
的类型。简言之 -bool a = 3 > 5;
不使用您的运算符 - 它使用整数的内置运算符。因此,一个不能被“转换”为另一个。 - Evkoperator > (int, int)
时,我希望它将“BuiltinOperator”添加到字典中,而不是“UserDefinedOperator”,这样当它在代码中使用时,我可以将其与我的方法信息类匹配。 - trinalbadger587