在C#中,你可以这样做:
SomeClass someClass = new SomeClass () {
SomeProperty = someValue
};
Run Code Online (Sandbox Code Playgroud)
这个语法叫什么?
编译一些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.
你能解释一下为什么会出现这个错误吗?
我在这里错过了什么?我希望以下工作正常:
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.)
我有以下对象,在我的构造函数中,我添加了一个新的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)
可能吗?
当我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) 有没有办法使用C#CodeDom生成字典初始化程序?那些支持吗?
我想拥有:
private IDictionary<string, string> map = new Dictionary<string, string>
{
{ "Name", "Value" },
...
};
Run Code Online (Sandbox Code Playgroud) 我可以以某种方式获得对使用对象初始化器创建的实例的引用
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)
我有一个复杂的场景,在对象初始化器中引用新实例会使生活更轻松.
这有可能吗?
可能重复:
初始化程序语法
要演示的短代码示例(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#中,您可以使用对象初始值设定项在创建时初始化对象的字段,而无需使用构造函数.
现在我想知道是否存在类的等价物,这意味着在定义子类时可以"初始化"类的属性而不实际使用覆盖语法,而只是声明已知属性的值是什么.
例:
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
在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# ×10
syntax ×3
.net ×1
asp.net-2.0 ×1
boilerplate ×1
codedom ×1
constructor ×1
subclassing ×1