【问题标题】:C# - How to get item from the list with complex typeC# - 如何从复杂类型的列表中获取项目
【发布时间】:2014-07-16 07:58:02
【问题描述】:

我是 C# 新手,但列表有问题。

我有一个班级留言:

public class Message
{
    public int MessageId { get; set; }
    public DateTime CreatedDate { get; set; }
    public string Text { get; set; }
    public string Autor { get; set; }
    public string Source { get; set; }
}

和 MessageHandler 类:

class MessageHandler
{
    private List<Message> _dummyMessages = new List<Message>()
       {
            new Message(){
                MessageId = 1,
                CreatedDate = new DateTime(2014, 5, 27),
                Text = "Srpska vodoprivreda...",
                Autor = "Marko Markovic",
                Source = "Twitter"

            },
            new Message(){
                MessageId = 2,
                CreatedDate = new DateTime(2014, 5, 27),
                Text = "Aerodrom Beograd...",
                Autor = "Zoran Zoric",
                Source = "B92"

            }
        };

    public List<Message> GetLatestMessages(int nrMessagesToReturn)
    {
        List<Message> retVal;

        retVal = this._dummyMessages.GetRange(0, nrMessagesToReturn);

        return retVal;
    }

   //todo: Search list _dummyMessages and get Source and
   //check is it equal to "Twitter"
}

我的问题是我不知道如何从 List&lt;Message&gt; 获取 Source :( 我是这样开始的:

public List<Message> SearchBySource()
{
    List<Message> retVal;

    foreach (Message m in _dummyMessages) 
    {
        //..........
    }
    return retVal;
}

但是如何从 Message 中获取 Source?

我想从 Message 中获取 Source,然后检查它是不是“Twitter”,因为我想从我的列表中计算所有“Twitter”来源...

对不起,愚蠢的问题,谢谢你的帮助!!

【问题讨论】:

  • 使用 linq dummyMessages.Where(x=> x.Source=="Twitter").ToList();
  • 鉴于上面的 sn-ps,我不明白您为什么需要问这个问题。这是关于最基本的知识(您实际上似乎拥有)。此外:您使用的是 Visual Studio 吗?你知道智能感知吗?在您的foreach 中尝试:m.
  • kostas 是对的,但是你可以像这样直接调用 count 方法:_dummyMessages.Where(obj =&gt; obj.Source == "Twitter").Count();
  • @Koryu:直接是_dummyMessages.Count(obj =&gt; obj.Source == "Twitter")
  • @Tim 是的。好吧,有很多可能性:)

标签: c# list search


【解决方案1】:
 var count = _dummyMessages.Count(m => m.Source == "Twitter");

参考:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

【讨论】:

    【解决方案2】:

    试试这个:

    List<Message> retVal;
    
    foreach (Message m in _dummyMessages) 
    {
        // Check if the message's source is twitter
        if(Message.Source=="Twitter")
                retVal.Add(Message);
    }
    
    return retVal;
    

    或者使用 LINQ:

    return _dummyMessages.Where(x=>x.Source=="Twitter").ToList();
    

    以上两个代码示例都将放在SearchBySource() 方法的主体中。

    我必须提出的一个建议是你使用一个参数,如下所示:

    public List<Message> SearchBySource(string source)
    {
        return _dummyMessages.Where(x=>x.Source==source).ToList();
    }
    

    为了让你的方法更有意义。您正在按来源搜索,因此您必须提供来源。

    【讨论】:

      【解决方案3】:

      Source 是您班级中的公共属性,这意味着您可以直接访问它:

      public List<Message> SearchBySource(string source)
      {
          List<Message> retVal = new List<Message>();
          foreach (Message m in _dummyMessages) 
          {
              if(source == m.Source)
                  retVal.Add(m);
          }
          return retVal;
      }
      

      您还可以将List.Find 与谓词一起使用:

      List<Message> retVal = _dummyMessages.Find(m => m.Source == source);
      

      另一种选择是使用 LINQ 计算所有带有 source="Twitter" 的消息:

      int countTwitter = _dummyMessages.Count(m => m.Source == "Twitter");
      

      或返回包含所有具有 source="Twitter" 的消息的列表:

      List<Message> retVal = _dummyMessages.Where(m => m.Source == "Twitter").ToList();
      

      【讨论】:

        【解决方案4】:
        class Program
        {
        
        
             public static List<Message> SearchBySource()
                {
                MessageHandler msg = new MessageHandler();
                List<Message> msgContent = msg.GetLatestMessages(1);
                return msgContent;
                }
        
             static void Main(string[] args)
             {
              List<Message> mymess =  SearchBySource();
                foreach (Message m in mymess) 
                {
                Console.WriteLine(m.Source);
                }
                 Console.ReadLine();
             } 
        

        获取第一个条目的代码示例,返回 Twitter。

        【讨论】:

          猜你喜欢
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-25
          • 2021-08-24
          • 2014-02-07
          相关资源
          最近更新 更多