【问题标题】:Cannot implicitly convert type Models to string issues无法将类型模型隐式转换为字符串问题
【发布时间】:2016-03-02 23:25:29
【问题描述】:

我真的不知道出了什么问题:我正在使用 asp.net web api 关注关于 rest web 服务的教程,我在GET(int id) 中遇到了这个错误: 无法将类型 Models.Client 隐式转换为 string

这是我的代码:

public string Get(int id)
{
    using (ClientDB db = new ClientDB())
    {
        return db.Clients.FirstOrDefault<Client>(c => c.Id == id);
    }
}

模型中的 ID 是整数类型,id 也是 我也试过SingleOrDefault而不是FirstOrDefault

【问题讨论】:

  • 发生这种情况是因为您的方法的return typestring 类型,而实际返回类型是错误状态Models.Client

标签: c# asp.net-web-api


【解决方案1】:

注意你的方法的签名。 return 类型是 string

public string Get(int id) //this signature shows that you should return a string

但是你在方法块中返回一个Client

return db.Clients.FirstOrDefault<Client>(c => c.Id == id); //you return a Client (or Default) here!

因此你得到了错误。

您需要更改任一方法以返回Client

public Client Get(int id) //change to return Client

或者将块中的return改成返回string

return db.Clients.FirstOrDefault<Client>(c => c.Id == id).ToString();

对于后一种解决方案,请注意FirstOrDefault 导致null。更安全的方法是:

Client client = db.Clients.FirstOrDefault<Client>(c => c.Id == id);
return client == null ? null : client.ToString();

在 C#6 中,可以简化其语法:

return db.Clients.FirstOrDefault<Client>(c => c.Id == id)?.ToString();

【讨论】:

  • 谢谢你,我真的没注意返回类型!
  • 在 C# 6 中,他们可以在 FirstOrDefault 之后执行 ?.ToString()
  • @juharr 适用于 C#6 解决方案。 ;) 为什么我不直接添加它?
  • @ian 你能告诉我为什么包含不起作用(现在不允许提问,所以请!):return db.Accounts.Include(c => c.Clients);
  • @Guest012393 为什么包括? O.o 我也不知道Accounts 是什么……从给定的信息中无法真正说出原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2014-05-15
  • 2014-02-04
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多