为什么在使用get方法之前需要IEnumerable<string>?

3

我刚开始学习使用ASP.NET编写Web API。我在Visual Studio中创建了一个新项目并尝试理解MVC文件夹结构和API调用。

我想知道的是:为什么我们需要在get方法之前加上IEnumerable<string>

在我的ValuesController.cs文件中,

        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

根据Microsoft文档,这会公开枚举器,该枚举器支持对指定类型的集合进行简单迭代,但如果我的数据库中有一个整数,我是否也需要将其转换为字符串?

1
如果你返回一组整数,请将 IEnumerable<string> 更改为 IEnumerable<int>IEnumerable<T> 是一个泛型,意味着它可以包含特定类型的类型安全集合 - 你只需要在尖括号 (<>) 之间指定类型即可。 - phuzi
好的,我明白了。还有一个问题,请问您能解释一下IEnumerable<>的目的吗?我们可以使用for循环完成相同的操作,对吧? - INDRAJITH EKANAYAKE
1
如果你的GET端点应该返回一组数字而不是单个数字,那么你肯定需要返回某种列表,无论是IEnumerable<T>还是List<T>或其他。 - MakePeaceGreatAgain
1
IEnumerable<> 的一个目的是可以在 Linq 查询中使用它。这可以是多个语句和多行。当该查询转换为 List()(例如),Linq 查询将被执行。如果您一开始使用 List,它将立即执行。 - Bob Lokerse
1
我想请 @HimBromBeere 写一个答案,他会比我解释得更好(我对此很有信心)。然后接受他的答案,否则我会更新我的答案。 - Prasad Telkikar
显示剩余5条评论
3个回答

5

IEnumerable<string>Get() 动作方法的返回类型。如果你的 api 返回任何值,则需要将该类型作为函数的返回类型。

如果我在数据库中有一个整数,我是否也需要将其转换为字符串?

  • 不需要,那么您可以返回给定的整数,并且该 api 端点的返回类型将是 int

例如:

    //+ Access Modifier
    //|     + Return Type           
    //|     |    + Function name
    public int Get()
    {
        return 200; //status code for Ok.
    }

关于 IEnumerable<>:

如果你有多个整数并且想返回这些整数的集合,则使用IEnumerable<int>

来自MSDN文档IEnumerable接口:

公开枚举器,支持对非泛型集合的简单迭代。


3
此外,您还可以返回带有字符串值的 IHttpActionResult
public IHttpActionResult Get()
{
    var model = new string[] { "value1", "value2" };
    return Ok(model);
}

或使用int值:

public IHttpActionResult Get()
{
    var model = new int[] { 1, 2, 3 };
    return Ok(model);
}

IHttpActionResult接口让您能够返回HTTP状态和更多内容。以下是使用IHttpActionResult接口的一些优点:

  • 简化了对控制器的单元测试。
  • 将创建HTTP响应的通用逻辑移入单独的类中。
  • 通过隐藏构造响应的底层细节,使控制器操作的意图更加清晰。

1
谢谢您的回答。我会尝试一下这个。 - INDRAJITH EKANAYAKE

1
如果您的GET端点需要返回数字集合而不是单个数字,那么您肯定需要返回某种列表,无论是IEnumerable还是List或其他什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接