Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能用C#和Javascript一样创建对象列表吗?_C#_List_Object_Razor Pages - Fatal编程技术网

你能用C#和Javascript一样创建对象列表吗?

你能用C#和Javascript一样创建对象列表吗?,c#,list,object,razor-pages,C#,List,Object,Razor Pages,在Javascript中,我知道您可以创建一个对象数组,如下所示: var myColumnDefs=[ {key:“label”,可排序:true,可调整大小:true}, {key:“notes”,可排序:true,可调整大小:true},。。。。。。 有可能在C#中做类似的事情吗 我尝试在类中创建属性,如下所示: 公共列表项目{get;set;} 在Razor页面中,我尝试创建一些对象: public void OnGet() { 项目=新列表{ {title=“thing”}, {.

在Javascript中,我知道您可以创建一个对象数组,如下所示:

var myColumnDefs=[
{key:“label”,可排序:true,可调整大小:true},
{key:“notes”,可排序:true,可调整大小:true},。。。。。。
有可能在C#中做类似的事情吗

我尝试在类中创建属性,如下所示:

公共列表项目{get;set;}
在Razor页面中,我尝试创建一些对象:

public void OnGet()
{
项目=新列表{
{title=“thing”},
{...},
}
}
但它似乎不起作用。有人有什么想法吗?

像这样

        Projects = new List<Object>(new[] {
            new { title = "thing1" },
            new { title = "thing2" }
        });
……或者

        Projects.AddRange(new[] {
            new { title = "thing1" },
            new { title = "thing2" }
        });

正如您可能从收到的评论中怀疑的那样,试图使一种编程语言看起来像另一种编程语言通常会导致问题。您应该尝试遵循编写程序所用语言的约定

例如,C#被设计为强类型。这意味着您通常为数据包含的内容以及允许程序的行为定义规则。实现这一点的方法之一是定义类;类类似于数据集合的模板或规则。例如:

class Project
{
    public string Title { get; }

    public Project(string title)
    {
        if (string.IsNullOrEmpty(title) throw new ArgumentNullException(nameof(title));

        Title = title;
    }
}
定义一种称为Project的新数据类型,该数据类型必须包含一个称为Title的非空字符串。任何人都可以读取项目的标题,但只有项目本身可以更改标题。这通常是您想要的。类只是规则,您实际使用
new
关键字创建类的实例:

var myFirstProject = new Project("Project one");
您可以使用以下语法创建项目列表:

var projects = new List<Project>
{
    new Project("thing1"),
    new Project("thing2")
};
var项目=新列表
{
新项目(“项目1”),
新项目(“thing2”)
};
不要认为这是一种浪费;您定义的规则实际上对您很有用;它允许IDE使用Intellisense或Autocomplete填充大量代码。它可以防止您犯错误,例如分配给您从未期望分配给的对象。它还可以通过允许编译器根据需要进行优化来提高性能它知道不可能发生的事情


使用任何编程语言的功能,不要试图绕过它们。

我想如果你想通过名称new{foo=“bar”}
var myColumnDefs=new List{new{key=“label”,sortable=true,resizeable=true},new{key=“notes”,你可能想要一本字典而不是一个列表,sortable=true,resizeable=true};
或者是字典。但是您仍然需要新的项来填充它。另外,数组初始化语法取决于(我相信)集合对象上的Add方法。C#不是Javascript,对象列表本身不是一件非常有用的事情,通常是可疑设计的标志(除非有令人信服的体系结构原因这样做).在C#中,我们倾向于创建类以形成强类型范例,以帮助保持设计简洁、整洁和结构化,此外,还可以保持代码流畅、可维护和可预测。您应该研究结构、类、接口和强类型集合,您会发现在C#中的时间更有价值,您的代码也更易于表达essive和可维护性非常好。现在他们只需要知道如何使用匿名对象。是的……不同的问题:)
var projects = new List<Project>
{
    new Project("thing1"),
    new Project("thing2")
};