标签: object-initializers

这个C#语法的名称是什么?

在C#中,你可以这样做:

SomeClass someClass = new SomeClass () {
    SomeProperty = someValue
};
Run Code Online (Sandbox Code Playgroud)

这个语法叫什么?

c# syntax object-initializers

4
推荐指数
1
解决办法
228
查看次数

C#中的对象初始值设定项导致编译时错误

编译一些C#代码时,我收到错误:

新类型表达式需要()或[]

我的代码如下:

request.AddExtension(new ClaimsRequest {
        Country = DemandLevel.Request,
        Email = DemandLevel.Request,
        Gender = DemandLevel.Require,
        PostalCode = DemandLevel.Require,
        TimeZone = DemandLevel.Require,
});
Run Code Online (Sandbox Code Playgroud)

我正在使用ASP.NET 2.0.

你能解释一下为什么会出现这个错误吗?

c# visual-studio-2005 asp.net-2.0 object-initializers

4
推荐指数
1
解决办法
681
查看次数

对象初始化不适合我

我在这里错过了什么?我希望以下工作正常:

public class ProposalFileInfo
{
    public int FileId { get; set; }
    public bool IsSupportDocument { get; set; }
}

// ...

var attachments = new List<ProposalFileInfo>();

attachments.Add(new ProposalFileInfo { 1, false });
attachments.Add(new ProposalFileInfo { 2, false });
attachments.Add(new ProposalFileInfo { 3, false });
Run Code Online (Sandbox Code Playgroud)

相反,我{在最后三行的每个字符上都出现错误:

无法使用集合初始值设定项初始化类型'xxx.yyy.ProposalFileInfo',因为它没有实现'System.Collections.IEnumerable'

我没有使用Object初始化器吗?为什么它假设一个集合初始化器?(我正在使用Visual Studio 2012.)

c# syntax object-initializers collection-initializer

4
推荐指数
1
解决办法
1169
查看次数

C#Object Initializer:从另一个设置属性

我有以下对象,在我的构造函数中,我添加了一个新的Guid作为Id.

public class MyObject
{
  public MyObject()
  {
    Id = Guid.NewGuid().ToString();
  }

  public String Id { get; set; }
  public String Test { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我想在对象初始化器中做类似的事情:

var obj = new MyObject
{
  Test = Id; // Get new GUID created in constructor
}
Run Code Online (Sandbox Code Playgroud)

可能吗?

c# object-initializers

4
推荐指数
1
解决办法
1909
查看次数

如何在对象初始值设定项中使用Console.Write?

当我Console.Write在对象初始化程序中使用时,我收到此错误

错误CS0747初始化程序成员声明符无效

person[i] = new Karmand()
            {
                Console.Write("first name:"),
                FirstName = Console.ReadLine(),
                LastName = Console.ReadLine(),
                ID = Convert.ToInt32(Console.ReadLine()),
                Hoghoogh = Convert.ToDouble(Console.ReadLine())
            };
Run Code Online (Sandbox Code Playgroud)

.net c# object-initializers

4
推荐指数
1
解决办法
99
查看次数

CodeDom和集合初始化程序

有没有办法使用C#CodeDom生成字典初始化程序?那些支持吗?

我想拥有:

private IDictionary<string, string> map = new Dictionary<string, string>
{
    { "Name", "Value" },
    ...
};
Run Code Online (Sandbox Code Playgroud)

c# code-generation codedom object-initializers

3
推荐指数
1
解决办法
850
查看次数

C#Object Initialiser - 对新实例的引用

我可以以某种方式获得对使用对象初始化器创建的实例的引用

var x = new TestClass
           {
                 Id = 1,
                 SomeProperty = SomeMethod(this)
           }
Run Code Online (Sandbox Code Playgroud)

"this"应该指向我正在创建的新TestClass实例.但它显然是指代码所在的类的实例.

我不是在问这是否是一个很好的方法.我知道我可以这样做:

var x = new TestClass {Id= x};
x.SomeProperty = SomeMethod(this);
Run Code Online (Sandbox Code Playgroud)

我有一个复杂的场景,在对象初始化器中引用新实例会使生活更轻松.

这有可能吗?

c# syntax object-initializers

3
推荐指数
1
解决办法
1076
查看次数

编译器接受抛出NullReferenceException的几乎对象初始化器

可能重复:
初始化程序语法

要演示的短代码示例(VS2010 SP1,64位Win7):

class A
{
    public string Name { get; set; }
}

class B
{
    public A a { get; set; }
}

// OK
A a = new A { Name = "foo" };
// Using collection initialiser syntax fails as expected:
// "Can only use array initializer expressions to assign
// to array types. Try using a new expression instead."
A a = { Name = "foo" };

// OK
B b = new B …
Run Code Online (Sandbox Code Playgroud)

c# object-initializers

3
推荐指数
1
解决办法
261
查看次数

C#中是否可以使用类初始值设定项?

在C#中,您可以使用对象初始值设定项在创建时初始化对象的字段,而无需使用构造函数.

现在我想知道是否存在类的等价物,这意味着在定义子类时可以"初始化"类的属性而不实际使用覆盖语法,而只是声明已知属性的值是什么.

例:

public abstract class Car {
    public abstract string Name { get; }
}
// usual approach
public class Mustang : Car {
    public overwrite string Name { get { return "Ford Mustang"; } }
}
// my idea of avoiding boilerplate code
public class Mustang : Car { Name = "Ford Mustang" }
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?如果没有,T4模板可以提供任何帮助吗?

c# abstract-class boilerplate object-initializers subclassing

3
推荐指数
1
解决办法
613
查看次数

带对象初始值设定项的括号

在C#中,我可以有一个类,如:

class MyClass {
  public void DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样初始化这个类:

MyClass mc = new MyClass();
Run Code Online (Sandbox Code Playgroud)

要么:

MyClass mc = new MyClass { };
Run Code Online (Sandbox Code Playgroud)

如果我不需要括号,并且没有对象初始化程序设置的属性,为什么我不能这样做?

MyClass mc = new MyClass;
Run Code Online (Sandbox Code Playgroud)

c# constructor object-initializers

3
推荐指数
1
解决办法
831
查看次数