Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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#对象/列表初始值设定项语法的优点是什么? 初始化大量静态对象时是否有速度提升 是否有编译时间或其他优点_C#_Initializer List_Initializer - Fatal编程技术网

C#对象/列表初始值设定项语法的优点是什么? 初始化大量静态对象时是否有速度提升 是否有编译时间或其他优点

C#对象/列表初始值设定项语法的优点是什么? 初始化大量静态对象时是否有速度提升 是否有编译时间或其他优点,c#,initializer-list,initializer,C#,Initializer List,Initializer,e、 g: IList对象=新列表 { 新对象(), 新对象(), 新对象() }; vs: IList<object> objects = new List<object>(); objects.Add(new object()); objects.Add(new object()); objects.Add(new object()); IList objects=new List(); 添加(新对象()); 添加(新对象()); 添加(新对象()); 这两段代码

e、 g:

IList对象=新列表
{
新对象(),
新对象(),
新对象()
};
vs:

IList<object> objects = new List<object>();
objects.Add(new object());
objects.Add(new object());
objects.Add(new object());
IList objects=new List();
添加(新对象());
添加(新对象());
添加(新对象());

这两段代码之间没有运行时差异。它们都将编译成相同的IL

初始化器语法的主要优点是,它基本上是在单个表达式中初始化列表,而不是跨多个语句初始化列表。例如,您可以使用它从方法返回列表,而无需显式创建临时变量(编译器会为您创建此临时变量):

public List MakeListOf3(T val)
{
返回新列表{val,val,val};
}
与之相反:

public List<T> MakeListOf3<T>( T val )
{
    var list = new List<T>();
    list.Add( val );
    list.Add( val );
    list.Add( val );
    return list;
}
public List MakeListOf3(T val)
{
var list=新列表();
列表。添加(val);
列表。添加(val);
列表。添加(val);
退货清单;
}

这是非常做作的,但是你明白了。

这两段代码之间没有运行时差异。它们都将编译成相同的IL

初始化器语法的主要优点是,它基本上是在单个表达式中初始化列表,而不是跨多个语句初始化列表。例如,您可以使用它从方法返回列表,而无需显式创建临时变量(编译器会为您创建此临时变量):

public List MakeListOf3(T val)
{
返回新列表{val,val,val};
}
与之相反:

public List<T> MakeListOf3<T>( T val )
{
    var list = new List<T>();
    list.Add( val );
    list.Add( val );
    list.Add( val );
    return list;
}
public List MakeListOf3(T val)
{
var list=新列表();
列表。添加(val);
列表。添加(val);
列表。添加(val);
退货清单;
}

这很做作,但你明白了。

这基本上是一种句法上的糖分,是个人品味和美学的问题

另外,值得一提的是,可以组合集合初始值设定项和对象初始值设定项。您可以在一次运行中构建相当复杂的结构,例如:

Product product = new Product
{
    Name = "Dog food",
    Price = 9.95,
    Manufacturer =
    {
        Name = "Dog food producer"
        Location = "Some location"
    },
    SimilarProducts =
    {
        new Product { Name = "Cat food" },
        new Product { Name = "Bird food", Price = 5.50},
        new Product 
        { 
            Name = "Guinea Pig food", 
            Price = 5.50
            SimilarProducts = 
            { 
                new Product { Name = "Guinea Pig shampoo" }, 
                new Product { Name = "Guinea Pig toofpaste" }
            },
        },
    },
}

这基本上是一种句法上的糖分,是个人品味和美学的问题

另外,值得一提的是,可以组合集合初始值设定项和对象初始值设定项。您可以在一次运行中构建相当复杂的结构,例如:

Product product = new Product
{
    Name = "Dog food",
    Price = 9.95,
    Manufacturer =
    {
        Name = "Dog food producer"
        Location = "Some location"
    },
    SimilarProducts =
    {
        new Product { Name = "Cat food" },
        new Product { Name = "Bird food", Price = 5.50},
        new Product 
        { 
            Name = "Guinea Pig food", 
            Price = 5.50
            SimilarProducts = 
            { 
                new Product { Name = "Guinea Pig shampoo" }, 
                new Product { Name = "Guinea Pig toofpaste" }
            },
        },
    },
}

1-这是一种更具可读性、更少繁琐的语法。2-
新建对象()
没有任何意义。3-使用
var
而不是两次键入相同的内容
IList objects=new List()在同一行代码中。C#不是java。4-不,它不提供任何运行时好处。它编译为相同的IL。对代码中的每个对象使用var不是都会增加大量编译时开销吗?:)我学会了在像IDictionary这样的大名对象上谨慎地使用它。。。。对编译器来说,推断一个类型是一件微不足道的工作@HighCore我认为你应该把它作为答案而不是评论来写好吧,太棒了,每天都能学到很多东西:)还有,是的@HighCore,请把解决方案作为答案来写,这样我就可以标记它了。1-这是一种更具可读性、更少陈词滥调的语法。2-
新建对象()
没有任何意义。3-使用
var
而不是两次键入相同的内容
IList objects=new List()在同一行代码中。C#不是java。4-不,它不提供任何运行时好处。它编译为相同的IL。对代码中的每个对象使用var不是都会增加大量编译时开销吗?:)我学会了在像IDictionary这样的大名对象上谨慎地使用它。。。。对编译器来说,推断一个类型是一件微不足道的工作@HighCore我认为你应该把它作为答案而不是评论来写好吧,好吧,太棒了,每天都能学到很多东西:)还有,是的@HighCore,请把解决方案作为答案来写,这样我就可以标记它了。