2

我正在使用 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;

将来,flags 字段中的第 3 位和第 4 位可能会在更改 reserved3 和 reserved4 字段的名称和类型后用于传输新字段

4

2 回答 2

1

这意味着int根据 TLGenerator

于 2017-01-31T05:48:30.143 回答
1
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 对象,但在其他情况下,它可以转换
为另一种对象。

也许这个 TLObject 在 c# 中的正确方法是:

[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
    [TLProperty(1)]
    public int Flags { get; set; }

    [TLProperty(2)]
    public bool ReportSpam { get; set; }

}

抱歉我的英语生疏了

于 2017-06-22T05:53:03.913 回答