JS对象喜欢C#中的集合

时间:2013-08-18 22:15:07

标签: c# object collections properties

在用JS练习一段时间后,我转到了C#。我正在尝试使用C#创建一个具有某些属性的对象。在JS中,我可以这样做:

var person = {
    fname : "",
    lname : "",
    id    : ""
}

我想在C#中创建类似的东西。我看了一些东西,我有点困惑。有类,字典,哈希表。我不知道从哪里开始。

如果有办法在不使用构造函数的情况下执行此操作,我更愿意使用它。 Cus我不会改变这些值,使用构造函数是一种痛苦。对象将具有10+属性,因此使用正确的顺序将它们键入一行...呃,不。

4 个答案:

答案 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中那样更改属性中的值类型。