在C#中关联不同类型的数组

时间:2019-04-26 17:51:20

标签: c#

我正在学习C#(来自Web开发人员的背景,使用JS和PHP),我想知道是否有可能在C#中创建不同类型的关联数组。

例如,在PHP中,我可以执行以下操作:

$arr = [
   ['name' => 'Jack', 'age' => 24, 'averageGrade' => 7.23],
   ['name' => 'Jessica', 'age' => 29, 'averageGrade' => 8.12],
   ['name' => 'Joe', 'age' => 22, 'averageGrade' => 9.51]
];

在C#中有没有办法做到这一点?有没有一种创建它们的方法,以便它们可以获取我想要的尽可能多的数据?例如,也许然后我想为每个名为favouriteColor的字段添加一个字段。

然后,如何遍历它?用PHP超级容易:

foreach($item as $arr => $value){
    echo $value['name']; //jack, jessica, joe
}

3 个答案:

答案 0 :(得分:3)

您可以使用匿名类型

var anonArray = new[] {
    new { name = "Jack", age = 24, averageGrade = 7.23 },
    new { name = "Jessica", age = 29, averageGrade = 8.12 },
    new { name = "Joe", age = 22, averageGrade = 9.51 }
};

但是我称这为“懒惰之路”。我强烈建议即使是很小的结构也要定义一个类。

参考:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/anonymous-types

答案 1 :(得分:2)

在C#中执行此操作的方法: 我并不是说这是最好的方法,但是它给出了一个主意。

from bs4 import BeautifulSoup

html = open("AAN.HTML").read()
soup = BeautifulSoup(html, 'html.parser')

for item in soup.findAll(['a', 'div']):
    if item.name == 'a':
        a = item
    if item.name == 'div':
        a.append(item)

my_html = str(soup.prettify())
print(my_html)

答案 2 :(得分:0)

好吧,这里可以说几句话。

首先,you might want to look into the dynamic type in c#避免了编译时类型检查,而是在运行时定义了类型。但是,您不能动态添加属性。从这种意义上讲,我认为您应该检出ExpandoObject, which, quoting the documentation,“代表一个对象,其成员可以在运行时动态添加和删除”。

但是,我想必须要说的是,特别是因为您来自JS,它不是Java或c#的静态类型语言(相反,它是动态类型的语言):您会想成为使用这些东西时要小心,并要注意良好的编码习惯。毕竟,c#是一种静态类型的语言,因此在大多数情况下,绕过编译时类型检查根本是不合理的。这没有任何意义。换句话说,这可能意味着您没有正确使用OOP。例如,您的类可能设计得不好,或者有更好的解决方案可以利用您根本看不到的类型。

祝你好运!希望对您有所帮助。