0

我正在尝试创建一个电报消息类并使用他们的网络服务。电报消息有一个属性名chat,可以是用户类型,也可以是群聊类型。像这样:

chat    User or GroupChat   Conversation the message belongs to — user in case of a private message, GroupChat in case of a group

如何创建具有两种类型的数据成员?我现在知道我应该如何问我的问题。它对我来说有点新,所以如果它如此明显,请接受我的道歉。谢谢。

更新

太感谢了。我像这样更改了我的消息类:

namespace bot.TelegramUpdate
{
    [DataContract]
    public class Message
    {
        [DataMember(Order = 1)]
        public int message_id;
        [DataMember(Order = 2)]
        public User from;
        [DataMember(Order = 3)]
        public int date;
        [DataMember(Order = 4)]
        public IChat chat;
    }
}

这也是我的Ichat界面:

interface IChat
{
    int Id { get; set; }
}

class User : IChat
{
    [DataMember(Order = 1)]
    public int id { get; set; }
    [DataMember(Order = 2)]
    public string first_name;
    [DataMember(Order = 3)]
    public string last_name;
    [DataMember(Order = 4)]
    public string username;
}

class GroupChat : IChat
{
    [DataMember(Order = 1)]
    public int id { get; set; }
    [DataMember(Order = 2)]
    public string title;
}

但问题是当我更改课程时,电报无法调用我的网络服务。我不知道为什么!

4

4 回答 4

2

你的意思是做一个设置?这通常是这样完成的:

public enum ChatType { User = 1, GroupChat = 2 }

public class Message
{
  public ChatType Chat;
}

您还可以创建一个接口或基类,最终可能成为不同类型的聊天对象。

public interface Chat
{
  // chat properties
}

public User : Chat
{
}

public GroupChat: Chat
{
}

public Processor
{
  public void Receive(Message mesage)
  {
     var user = message.Chat as User;
     if(user != null)
     // Handle user specific
  }

  public Message Send()
  {
     if(single)
       return new Message() { Chat = new User() };
     else
       return new Message() { Chat = new ChatGroup() };
  }
}
于 2015-09-02T15:07:26.657 回答
1

为什么不创建两个不同类型的成员并检查哪一个不为空?

您还应该阅读有关接口的内容。

using System;

public class Test
{
    interface IChat
    {
        int Id { get; set; }
    }

    class User : IChat
    {
        public int Id { get; set; }
        public string first_name;
        public string last_name;
        public string username;
    }

    class GroupChat : IChat
    {
        public int Id { get; set; }
        public string title;
    }

    class MyClass
    {
        public IChat Chat { get; set; }
    }

    public static void Main()
    {
        MyClass foo = new MyClass();
        foo.Chat = new User();

        MyClass bar = new MyClass();
        bar.Chat = new GroupChat();

        if(foo.Chat.GetType() == typeof(User))
            Console.WriteLine("foo has User");
        else
            Console.WriteLine("foo has GroupChat");

        if(bar.Chat.GetType() == typeof(User))
            Console.WriteLine("bar has User");
        else
            Console.WriteLine("bar has GroupChat");
    }
}
于 2015-09-02T14:54:42.940 回答
1

让 User 和 GroupChat 都实现一个接口。类似的东西IConversationOwner。那么您的会员类型可以是IConversationOwner.

于 2015-09-02T15:04:01.457 回答
0

使用 Object 作为类型并检查 if(obj is User).. / if(obj is GroupChat)

于 2015-09-02T15:03:13.843 回答