【问题标题】:Add an element to a C# array将元素添加到 C# 数组
【发布时间】:2016-04-26 10:46:00
【问题描述】:

我正在尝试向数组中添加一个元素。

public SoftwareInfoDTO[] GetAllInfo(IPrincipal principal)
    {
        Checks.Checks.CheckPrincipal(principal);

        using (var context = new Context(ConnectionString))
        {
            var allInfo = context.Softwares;
            SoftwareInfoDTO[] softInfoArray = new SoftwareInfoDTO[] {};

            foreach (var elem in allInfo)
            {
                SoftwareInfoDTO softInfo = new SoftwareInfoDTO
                {
                    Id = elem.Id,
                    Name = elem.Name
                };
                softInfoArray.???  <---- NO IDEA
            }

            return softInfoArray;
        }
    }

我的想法是调用像“插入”这样的方法来将元素添加到我的数组中,但我没有找到有用的东西。

然后我实现了这里写下来的代码,这段代码可以用但是我不是很喜欢,不支持List可以只用数组吗?

非常感谢。

public SoftwareInfoDTO[] GetAllInfo(IPrincipal principal)
    {
        Checks.Checks.CheckPrincipal(principal);

        using (var context = new Context(ConnectionString))
        {
            var allInfo = context.Softwares;

            IList<SoftwareInfoDTO> softInfoArray = new List<SoftwareInfoDTO>();
            foreach (var elem in allInfo)
            {
                SoftwareInfoDTO softInfo = new SoftwareInfoDTO
                {
                    Id = elem.Id,
                    Name = elem.Name
                };
                softInfoArray.Add(softInfo);
            }

            return softInfoArray.ToArray();
        }
    }

【问题讨论】:

标签: c# arrays list element dto


【解决方案1】:

数组没有实现IList,从而导致.Add()等方法不可用。 Array 具有固定大小,因此如果您知道确切的大小,则可以在指定的索引中插入对象。实际上,这种情况很少发生。

如果我必须实现这一点,我将使用 Linq 并使用 Select 遍历初始集合,以便为集合的每个成员创建一个新对象,从而为您留下一个IEnumerable&lt;T&gt;T 在您的情况下是 SoftwareInfoDTO),您可以轻松地将其转换为数组。

例如:

return allInfo.Select(elem => 
  new SoftwareInfoDTO
            {
                Id = elem.Id,
                Name = elem.Name
            }).ToArray();

【讨论】:

  • 我要指出,作为一般规则,您根本不想在 C# 中处理数组,除非您正在做一些特殊的低级工作或正在处理旧/外部 API。更喜欢公开通用接口。根据我的经验,当一个方法返回一个数组或一个列表时,有 9/10 次它应该返回一个 IEnumerable,因为客户端不需要,也确实“不允许”改变集合。
【解决方案2】:

使用数组时,您必须在初始化时设置数组的大小。

这里是关于为什么要使用 List&lt;T&gt; https://stackoverflow.com/a/434765/2195005 的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2015-05-11
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多