【问题标题】:Define an array of mixed types in C# [duplicate]在C#中定义一个混合类型的数组[重复]
【发布时间】:2017-05-04 22:43:10
【问题描述】:

我正在整理一个小 C# 项目 - 我正在将我用 JavaScript 编写的东西重写为 C#。

我的部分项目需要一个包含混合内容的数组数组。在 JavaScript 中我只是初始化数组:

Log: []

然后使用推送:

Log.push(logEntry);

logEntry 在哪里:

string, string, string, int, int, int

整数也可能为空。

这样做的目的是在对其进行 JSON 编码并将其发送到另一台服务器上的 Web API 之前存储数据。

有人可以指出我在 C# 中执行此操作的正确方向吗,因为我发现的所有答案似乎都只想存储相同类型的数据。

提前致谢,

托尼。

【问题讨论】:

  • List<Object> 是一个好方法,或者List<dynamic> 是另一种方法。

标签: javascript c# arrays


【解决方案1】:

你可以这样做

使用List<object>(因为一切都源自C#中的对象):

var list = new List<object>();
list.Add(123);
list.Add("Hello World");

dynamic 也可能适合您(以及您的 javascript 背景)

var list = new List<dynamic>();
list.Add(123);
list.Add(new
{
    Name = "Lorem Ipsum"
});

如果你不想使用dynamic,你真的需要知道你在做什么。请在开始之前阅读此MSDN article

但是你需要吗?

C# 是一种强类型且非常可靠的编程语言。它非常灵活,非常适合使用面向对象和功能范式构建应用程序。您想要做的事情对于 javascript 来说可能很好,但对于 C# 来说看起来有点难看。我的建议是:使用面向对象编程并尝试为您的问题构建模型。永远不要像您尝试的那样将类型混合在一起。一个列表是针对单一数据类型的。

【讨论】:

  • 秒杀我。这就是我会使用的。一切都源自System.Object
  • 那么我要为数组中的每个新数组添加 list.Add 吗?像 list.Add(new{string, string, string, int, int, int}) - 其中 string 和 int 显然会被实际值替换。
  • @TonyMerryfield 如果您需要将数组添加到列表中,请使用list.AddRange(array)。请注意:最后一个示例是将对象添加到列表而不是数组。
  • @AndreiM - 这样做的目的是构建一个用于 Web 服务的数据集。该数组最终将获得 JSON 编码并发送到 API。我将给出上面的例子,看看它是如何工作的:)
  • @TonyMerryfield 你能告诉我更多关于你的数据集的信息吗?
【解决方案2】:
  1. 您可以尝试使用ArrayList 类。
  2. 异构对象集合的另一种方法是使用List&lt;Object&gt;

ArrayList 类旨在保存对象集合。对象可以是不同的类型。但是,它并不总是提供最佳性能。

来自MSDN

ArrayList 类旨在保存异构的集合 对象。但是,它并不总是提供最佳性能。 相反,我们建议如下:

对于对象的异构集合,使用 List(在 C#) 或 List(Of Object)(在 Visual Basic 中)类型。

对于对象的同类集合,请使用 List 类。

【讨论】:

    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多