【问题标题】:ID of the First message LINQ C#第一条消息的 ID LINQ C#
【发布时间】:2021-04-06 10:46:37
【问题描述】:

我对 Linq 表达式有疑问。 我有一个这样的txt数据。

int 日期,int ID,字符串消息

1 13
#abor# #e#tun###agy#szel#2# #o##h#d#g ##rkasn#o#oka# #a#tunk e####a#akn##$#$#$##$$$$$$####
1 19
ta###t##ertunk ##gy #zel#####ok hide##f#r##sn#omo#at ##ttu## e#y patak#al$#$$$$$###$$$$$$$
.............

我喜欢获取第一条消息的 ID。 我试过这样:

public static void task2()
{
           IEnumerable<Expadatok> firstmessid = Expadat.First(x => x.message).ID;
           Expadatok firstmessid = Expadat.First(x => x.message).ID;

           Console.WriteLine($"The ID of the first massage was {firstmessid}");
}

但他们都没有工作。 数据读取成功,我做错了什么?

【问题讨论】:

  • 还有Expadat.First().ID ?
  • 请添加有关这些消息如何以Expadat 结尾的信息以及Expadat 的样子。另外,“他们都没有工作”是什么意思?例外?如果是,请显示异常消息。
  • 这是一个列表 private static List&lt;Expadatok&gt; Expadat = new List&lt;Expadatok&gt;(); 它说不能将 x.message 的类型 'string' 隐式转换为 'bool'
  • 这意味着你永远不会得到任何输出,因为Expadat 是空的。如何将文本转换为Expadatok
  • 不为空,我做了一个构造函数,通过方法上传了带有txt数据的列表。

标签: c# linq lambda


【解决方案1】:

没有关于什么是 Expadat、Expadatok ...以及 First(x => x.message) 可能意味着什么的信息(消息是字符串,不是吗?在应该有布尔表达式的上下文中使用)。

这很好用:

void Main()
{
    var plain = s.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
    var data = plain
        .Where((p, i) => i % 2 == 0)
        .Select(p => p.Split())
        .Select(p => new {Day=p[0], ID=p[1]})
        .Zip(plain.Where((p, i) => i % 2 == 1), (f, s) => new {Day = f.Day, ID=f.ID,Message=s});
    
    Console.WriteLine(data.First(x => x.Message).Message);
}

string s = @"1 13
#abor# #e#tun###agy#szel#2# #o##h#d#g ##rkasn#o#oka# #a#tunk e####a#akn##$#$#$##$$$$$$####
1 19
ta###t##ertunk ##gy #zel#####ok hide##f#r##sn#omo#at ##ttu## e#y patak#al$#$$$$$###$$$$$$$";

【讨论】:

    【解决方案2】:

    Expadat.First(x =&gt; x.message) 不是的意思是“从 Expadat 获取第一条消息”,而是“从 Expadat 获取第一个消息属性为 'true' 的项目”。由于message 的类型为string,这是一个编译器错误(“无法将类型'string' 隐式转换为'bool'”)。

    你可能想要的是

    Expadat.First().ID 
    

    含义:从Expadat中获取第一项,然后使用其ID属性。

    请注意,如果 Expadat 为空,.First() 将失败。您可以使用.FirstOrDefault(),但是当列表为空时会返回null - 当您尝试访问其 ID 属性时会导致 NullReferenceException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多