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)
这一行应该返回一个类型的对象 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)