繁体   English   中英

C# - 如何从复杂类型的列表中获取项目

[英]C# - How to get item from the list with complex type

我是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<Message>获取Source :(我开始是这样的:

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

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

但是如何从消息中获取Source?

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

抱歉愚蠢的问题,谢谢你的帮助!!

 var count = _dummyMessages.Count(m => m.Source == "Twitter");

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

试试这个:

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();
}

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

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();
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();
     } 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM