首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将TL语言(mtproto)类型转换为C#

将TL语言(mtproto)类型转换为C#
EN

Stack Overflow用户
提问于 2016-05-25 18:20:35
回答 2查看 1.1K关注 0票数 2

我正在使用TL语言编译器来编译C#中用https://core.telegram.org/mtproto描述的Telegram Api TL语言的模式

有一个编译器可以将tl-language编译成C#类https://github.com/everbytes/SharpTL.Compiler

但是它可以在下面这一行编译新的电报模式:

代码语言:javascript
复制
"params":[
    {"name":"flags","type":"#"},
    {"name":"report_spam","type":"flags.0?true"}]
,"type":"PeerSettings"}

然后把它编译成错误的代码:

代码语言:javascript
复制
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
    [TLProperty(1)]
    public I# Flags { get; set; }

    [TLProperty(2)]
    public IFlags0?true ReportSpam { get; set; }

}

在C#代码中进行强制转换有什么解决方案吗?

我不知道C#中这个"flags:#“的类型是什么

此类型"#“在https://core.telegram.org/mtproto/TL-formal中描述

代码语言:javascript
复制
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字段的名称和类型之后,可以使用标志字段中的比特3和4来发送新字段

EN

回答 2

Stack Overflow用户

发布于 2017-01-31 13:48:30

根据TLGenerator,这意味着int

票数 1
EN

Stack Overflow用户

发布于 2017-06-22 13:53:04

代码语言:javascript
复制
peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings  

我认为这个散列(#)意味着变量的动态值,在某些情况下它可以是真或假,另一些情况下它可以是一个非负的整数序列:

代码语言:javascript
复制
matrix {X:Type} m:# n:# a:(%Tuple (%Tuple X m) n) = Matrix X;

上面我们得到的M和N取一个大于0的整数随机值

代码语言:javascript
复制
get_users req_fields:# ids:%(Vector int) = Vector %(User req_fields)

在另一种情况下,它可以假设一个条件值

req_fields变量仅强制转换为User对象,但在其他情况下也可以转换

到另一种物体上。

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

代码语言:javascript
复制
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
    [TLProperty(1)]
    public int Flags { get; set; }

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

}

抱歉,我的英语生疏了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37434208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档