找到包含特定文本的项目

zar*_*han 0 c# linq lambda contains

我有下课

public class Response
{
   public Prompts Prompts { get; set; }
}
public class Prompts
{
    public List<Prompt> prompt { get; set; }
}
public class Prompt
{        
    public object message { get; set; }
    public object details { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想检索该消息prompt,其message包含"你好".但它给了我错误:

无法隐式地从提示转换为字符串

到目前为止,我尝试了这个lambda表达式:

string message = Response.Prompts.prompt.Find(p => p.message.ToString().Contains("Hello")); 
Run Code Online (Sandbox Code Playgroud)

Mon*_*Zhu 7

这一行应该返回一个类型的对象 Prompt

Prompt pr = Response.Prompts.prompt.Find(p => p.message.ToString().Contains("Hello")); 
Run Code Online (Sandbox Code Playgroud)

如果您只需要访问该属性所需的消息.因为它是类型,object你需要调用该ToString()方法

string message  = pr.message.ToString();
Run Code Online (Sandbox Code Playgroud)

或者把它投到一个 string

string message  = (string)pr.message;
Run Code Online (Sandbox Code Playgroud)

如果你需要它不区分大小写:

Prompt pr = Response.Prompts.prompt.Find(
       p => p.message.ToString().ToLower().Contains("Hello".ToLower())); 
Run Code Online (Sandbox Code Playgroud)

因为Find(...)null在找不到匹配项时返回,建议在访问属性时检查它:

string message  = pr != null pr.message.ToString() : "";
Run Code Online (Sandbox Code Playgroud)