我正在使用tl语言编译器来编译C#中https://core.telegram.org/mtproto中描述的Telegram Api TL语言的模式
有一个编译器可以将tl语言编译为C#类https://github.com/everbytes/SharpTL.Compiler
但它可以在这一行编译新的电报架构:
"params":[
{"name":"flags","type":"#"},
{"name":"report_spam","type":"flags.0?true"}]
,"type":"PeerSettings"}
并将其编译为错误的代码:
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
[TLProperty(1)]
public I# Flags { get; set; }
[TLProperty(2)]
public IFlags0?true ReportSpam { get; set; }
}
C#代码中是否有任何解决方案?
我不知道这是什么类型"标志:#"在C#
此类型"#"在https://core.telegram.org/mtproto/TL-formal
中描述user {flags:#} id:flags.0?string first_name:flags.1?string last_name:flags.2?string reserved3:flags.3?False reserved4:flags.4?False = User flags;
将来,在更改reserved3和reserved4字段的名称和类型后,flags字段中的第3位和第4位可用于传输新字段
答案 0 :(得分:0)
根据TLGenerator
,这意味着int
答案 1 :(得分:0)
peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings
深入搜索这个我认为这个哈希(#)意味着变量的动态值,在某些情况下它可以是真或假,另一种情况它可以是一个非负的整数序列:
matrix {X:Type} m:# n:# a:(%Tuple (%Tuple X m) n) = Matrix X;
以上我们得到M和N取整数随机值> 0
get_users req_fields:# ids:%(Vector int) = Vector %(User req_fields)
在另一种情况下,它可以假设条件值
req_fields变量仅转换为User对象,但在其他情况下,它可以转换为
到另一种对象。
c#中这个TLObject的正确方法可能是:
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
[TLProperty(1)]
public int Flags { get; set; }
[TLProperty(2)]
public bool ReportSpam { get; set; }
}
道歉我的英语生锈了