我正在学习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
}
答案 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。例如,您的类可能设计得不好,或者有更好的解决方案可以利用您根本看不到的类型。
祝你好运!希望对您有所帮助。