1

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

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

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

如果有办法在不使用构造函数的情况下做到这一点,我宁愿使用它。因为我不会更改这些值,并且使用构造函数很痛苦。对象将具有 10 多个属性,因此以正确的顺序在一行中键入它们......呃,不。

4

4 回答 4

2

除了已经提供的答案之外,c# 还允许匿名类型并支持动态类型。因此,以您给出的示例为例,在 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);

这些例子有点做作。在某些特定情况下,它们会派上用场。但是,除非您真的需要它,否则最好创建强类型类。它们为您提供了一个可以由编译器验证的公共接口契约。此外,在大多数情况下,动态类型的运行时成本会大大提高。

于 2013-08-18T23:00:56.333 回答
1

在 c#(4.0 及更高版本)中,您可以使用命名参数和可选参数 ( http://msdn.microsoft.com/en-us/library/dd264739.aspx ),因此您可以保持您的类不可变。

于 2013-08-18T22:34:39.217 回答
0

你可以创建一个类“人”

public class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
}

然后像这样实例化一个新的 Person :

var p = new Person {
    FirstName = "",
    LastName = "",
    ID = 1
};

和那个人做你需要的事

于 2013-08-18T22:24:09.880 回答
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 中那样更改属性中值的类型。

于 2013-08-18T22:24:54.960 回答