我试图使用Object初始化器来设置类的属性,然后在类的构造函数中访问它们.问题是在构造函数运行之后似乎没有设置属性.难道我做错了什么.
基础班..
public class TestClass
{
public string FirstName{get; set;}
public TestClass(){
NewClass nc = NewClass(FirstName);
}
}
Run Code Online (Sandbox Code Playgroud)
客户类
public class ClientClass
{
public ClientClass(){
TestClass tc = new TestClass{ FirstName="Jimmy"};
}
}
Run Code Online (Sandbox Code Playgroud) 为什么我可以Object Initializers在针对.NET 2.0的Visual Studio 2008 Windows项目等中使用但不能 - 在针对.NET 2.0的ASP.NET项目中?
我知道这是C#3.0的功能,但不要 - 为什么这可以在.NET 2.0项目中使用.
我在实体框架查询中遇到一个非常奇怪的问题,我花了几个小时.
执行查询时,我得到一个异常:
在构造函数和初始值设定项中,LINQ to Entities中仅支持属性或字段参数绑定.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.NotSupportedException:在构造函数和初始值设定项中,LINQ to Entities中仅支持属性或字段参数绑定.
我知道当您调用带有查询内部参数的构造函数时,通常会发生此问题.这很自然,因为LINQ to Entities无法知道那里发生了什么.
但是,我的查询只使用对象初始化程序语法来填充值,我假设将调用默认的无参数构造函数:
private static readonly Func<MyEntities, int, MessageParty> _getUserMessagePartyQuery = CompiledQuery.Compile(
( MyEntities ctx, int id ) =>
ctx.Users
.Where( u => u.ID == id )
.Select( u => new {
u, up = u.UserProfile, img = u.UserProfile.Image
})
.Select( info => new MessageParty
{
PartyID = id,
Title = info.u.FullName,
// Assignment below causes the failure:
Image = {
Image = info.img, …Run Code Online (Sandbox Code Playgroud) c# linq-to-entities entity-framework object-initializers entity-framework-4
这是我现在拥有的init,
- (id)init
{
self = [super init];
if (self) {
self.url = [[NSURL alloc] init];
self.blurb = [[NSString alloc] init];
self.author = [[NSString alloc] init];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
它什么也不做,但我有一个称为另一种方法initWithObject:将使用它的参数来填充实例变量url,blurb和author.我不知道我应该怎么做init.我应该抛出异常吗?我还有其他选择吗?
rectangle a=new a() { width=1; height=2; }
Run Code Online (Sandbox Code Playgroud)
我曾经构建过像这样的对象,在visual basic中有类似的方法吗?对不起,我无法真正标记这项技术.
我有一个名为data的对象,属于该类,
[DataContract]
public class names
{
[DataMember(Name = "code")]
public int Code { get; set; }
[DataMember(Name = "message")]
public string Message { get; set; }
[DataMember(Name = "values")]
public values values{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
其中value是另一个具有自己变量的类,最初在执行以下代码时,
names data= new names();
data.values.Name = "";
Run Code Online (Sandbox Code Playgroud)
执行第二行时,我得到一个null异常.
问题是什么?为什么data.values.Name即使在执行后仍然为null
names data= new names();
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能给它一些价值?
我试图在其初始化方法中调用类中的方法.这是不允许的?我最初在类之外使用了方法来尝试将其用作全局方法.当前方法尝试返回创建的矩阵,然后initialize方法将返回的矩阵保存到实例变量中.
class Member
def setMatrix(a, i, l)
puts "here"
m = Matrix.zero(6)
m[0,0] = a*l**2/i
m[0,3] = -a*l**2/i
m[1,1] = 12
m[1,2] = 6*l
m[1,4] = -12
m[1,5] = 6*l
m[2,1] = 6*l
m[2,2] = 4*l**2
m[2,4] = -6*l
m[2,5] = 2*l**2
m[3,0] = -a*l**2/i
m[3,3] = a*l**2/i
m[4,1] = -12
m[4,2] = -6*l
m[4,4] = 12
m[4,5] = -6*l
m[5,1] = 6*l
m[5,2] = 2*l**2
m[5,4] = -6*l
m[5,5] = 4*l**2
return m
#@k = m
end
def initialize(a, …Run Code Online (Sandbox Code Playgroud) 所以我正在查看文档以了解如何使用对象初始化程序,无论是否为匿名类型.我唯一想知道的是为什么(如果重要的话)在这个例子中存在差异.
它是这样的:对于一只猫
class Cat
{
public int Age { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以看到第一个例子:
Cat cat = new Cat { Age = 10, Name = "Fluffy" };
Run Code Online (Sandbox Code Playgroud)
这是有道理的.但是,您可以找到以下内容:
List<Cat> cats = new List<Cat>
{
new Cat(){ Name = "Sylvester", Age=8 },
new Cat(){ Name = "Whiskers", Age=2 }
};
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:(为什么)new Cat{...}
和之间存在差异new Cat(){...}?我们为什么要使用(或不使用)括号?
我试图用C#编写代码,但我发现我不能像C++这样构造一个实例:
Dictionary<string, List<string>> FirSet =
new Dictionary<string, List<string>>() {
{ "a", {"ab", "abc"} },
{ "b", {"bc", "bcd"} }
};
Run Code Online (Sandbox Code Playgroud) 我在初始化集合属性时注意到奇怪的行为。
考虑:
class X
{
public IList<int> Ints { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Ints我可以这样初始化:
var theObject = new X
{
Ints = { 12, 3, 4, 5, 6 }
};
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
var x = new X();
x.Ints = { 12, 3, 4, 5, 6 }
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?这似乎很不直观。
c# ×8
.net ×1
asp.net ×1
class ×1
cocoa-touch ×1
coding-style ×1
matrix ×1
object ×1
objective-c ×1
ruby ×1
vb.net ×1