在用JS练习一段时间后,我转到了C#。我正在尝试使用C#创建一个具有某些属性的对象。在JS中,我可以这样做:
var person = {
fname : "",
lname : "",
id : ""
}
我想在C#中创建类似的东西。我看了一些东西,我有点困惑。有类,字典,哈希表。我不知道从哪里开始。
如果有办法在不使用构造函数的情况下执行此操作,我更愿意使用它。 Cus我不会改变这些值,使用构造函数是一种痛苦。对象将具有10+属性,因此使用正确的顺序将它们键入一行...呃,不。
答案 0 :(得分:2)
除了已经提供的答案之外,c#还允许匿名类型,并且它支持动态类型。所以以你给出的例子为例,你可以做到:
匿名类型:
var person = new {
fname = "first",
lname = "last",
id = "123"
};
Console.WriteLine(person.lname);
动态类型:
dynamic anotherPerson = new System.Dynamic.ExpandoObject();
anotherPerson.FirstName = person.lname;
Console.WriteLine(anotherPerson.FirstName);
anotherPerson.PrintPerson = (Action<dynamic>)((p => Console.WriteLine("[{0}] {1}. {2}", p.id, p.lname, p.fname)));
anotherPerson.PrintPerson(person);
这些例子有点人为。在特定情况下,它们非常方便。但是,除非您确实需要它,否则最好创建强类型类。它们为您提供了可由编译器验证的公共接口契约。此外,在大多数情况下,动态类型的运行时成本会大幅提高。
答案 1 :(得分:1)
在c#(4.0及以上版本)中,您可以使用命名和可选参数(http://msdn.microsoft.com/en-us/library/dd264739.aspx),这样您就可以保持您的类不可变。
答案 2 :(得分:0)
您可以创建一个“人”类
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
}
然后像这样实例化一个新人:
var p = new Person {
FirstName = "",
LastName = "",
ID = 1
};
用那个人做你需要的东西
答案 3 :(得分:0)
您可以创建一个包含属性的C#类,因此您可以在单独的行上设置属性,类似于JavaScript的expando属性语法,如下所示:
public class Person
{
public string fname { get; set; }
public string lname { get; set; }
public int id { get; set; }
}
现在您可以调用该类并设置属性,如下所示:
var person = new Person();
person.fname = "John";
person.lname = "Jones";
person.id = 7;
此外,您可以使用对象初始值设定项语法,如下所示:
var person = new Person {
fname = "John",
lname = "Jones",
id = 7
};
注意:C#是强类型的,因此您无法像在JavaScript中那样更改属性中的值类型。