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

C#-如何从复杂类型的列表中获取项,c#,list,search,C#,List,Search,我是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; } } c

我是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; }
}
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"
}
和类MessageHandler:

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; }
}
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"
}
class消息处理程序
{
私有列表_dummyMessages=新列表()
{
新消息(){
MessageId=1,
CreatedDate=新日期时间(2014年5月27日),
Text=“斯普斯卡伏特加……”,
Autor=“Marko Markovic”,
Source=“Twitter”
},
新消息(){
MessageId=2,
CreatedDate=新日期时间(2014年5月27日),
Text=“Aerodrom Beograd…”,
Autor=“Zoran Zoric”,
Source=“B92”
}
};
公共列表GetLatestMessages(int nrMessagesToReturn)
{
列表检索;
retVal=this.\u dummyMessages.GetRange(0,nrMessagesToReturn);
返回返回;
}
//todo:搜索列表\u dummy消息并获取源和
//检查它是否等于“Twitter”
}
我的问题是我不知道如何从
列表中获取源代码(我是这样开始的:

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

    foreach (Message m in _dummyMessages) 
    {
        //..........
    }
    return retVal;
}
publicslist SearchBySource()
{
列表检索;
foreach(消息m在_dummy消息中)
{
//..........
}
返回返回;
}
但如何从消息中获取源呢

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

很抱歉提出这个愚蠢的问题,谢谢你的帮助!!

试试这个:

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;
上述两个代码示例都将放在
SearchBySource()方法的主体中

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

public List<Message> SearchBySource(string source)
{
    return _dummyMessages.Where(x=>x.Source==source).ToList();
}
公共列表SearchBySource(字符串源)
{
返回_dummyMessages.Where(x=>x.Source==Source.ToList();
}
为了让你的方法更有意义,你是在按来源搜索,所以你必须提供来源

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

ref:

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;
}
另一个选项是使用LINQ统计source=“Twitter”的所有消息:

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

List retVal=\u dummymmessages.Where(m=>m.Source==“Twitter”).ToList();
课程计划
{
公共静态列表SearchBySource()
{
MessageHandler msg=newmessagehandler();
List msgContent=msg.GetLatestMessages(1);
返回msgContent;
}
静态void Main(字符串[]参数)
{
List mymess=SearchBySource();
foreach(mymess中的消息m)
{
控制台写入线(m.Source);
}
Console.ReadLine();
} 

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

使用linq dummyMessages.Where(x=>x.Source==“Twitter”).ToList();鉴于上面的代码片段,我不明白您为什么要问这个问题。这是关于最基本的知识(您实际上似乎拥有这些知识)。此外:您使用的是Visual Studio吗?您知道Intellisense吗?请在您的
foreach中尝试一下:m.kostas是正确的,但您可以直接这样调用count方法:
\u dummyMessages.Where(obj=>obj.Source==“Twitter”).count();
@Koryu:directly是
\u dummyMessages.count(obj=>obj.Source==“Twitter”)
@Tim true.嗯,有这么多的可能性:)
int countTwitter = _dummyMessages.Count(m => m.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();
     }