Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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#中的对象初始值设定项初始化封装在getter/setter中的EntitySet?_C#_Windows Phone 7_Linq To Sql - Fatal编程技术网

如何使用C#中的对象初始值设定项初始化封装在getter/setter中的EntitySet?

如何使用C#中的对象初始值设定项初始化封装在getter/setter中的EntitySet?,c#,windows-phone-7,linq-to-sql,C#,Windows Phone 7,Linq To Sql,我正在为自己的应用程序调整。这里建议使用getter/setter组合包装模型对象上的EntitySet属性,该组合允许使用IEnumerable(使用Assign方法)进行赋值,例如 错误如下: Error 1 Cannot implicitly convert type 'System.Collections.Generic.List<SomeApp.ToDoItem>' to 'System.Data.Linq.EntitySet<SomeApp.ToDoI

我正在为自己的应用程序调整。这里建议使用getter/setter组合包装模型对象上的
EntitySet
属性,该组合允许使用
IEnumerable
(使用
Assign
方法)进行赋值,例如

错误如下:

Error    1   Cannot implicitly convert type 
'System.Collections.Generic.List<SomeApp.ToDoItem>' to 
'System.Data.Linq.EntitySet<SomeApp.ToDoItem>'
错误1无法隐式转换类型
“System.Collections.Generic.List”到
'System.Data.Linq.EntitySet'

如何实例化从
EntitySet
引用的对象?

嗯,您发布的代码有两个问题

我怀疑主要的问题是,当属性的类型为
EntitySet
时,您试图将属性的值设置为
列表。(您发布的错误消息与您发布的代码不匹配,但没关系。)您说它“应该允许从
IEnumerable
赋值,但我不知道为什么您会期望这种情况,因为属性声明:

public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
    get { return this._todos; }
    set { this._todos.Assign(value); }
}
我假设您的真实代码更像这样:

SomeModelObject myModelObject = new SomeModelObject() {
  Property1 = "foo",
  ... 
};
请以后更加小心-很难诊断未发布的代码

实体集有三个选项

如果要向现有的
EntitySet
添加新项,可以在对象初始值设定项中执行此操作:

SomeModelObject myModelObject = new SomeModelObject {
  Property1 = "foo",
  Property2 = true,
  ToDos = {
    new ToDoItem(),
  }
};
或者,如果要设置属性本身的值,则需要创建一个新的
EntitySet

SomeModelObject myModelObject=新建SomeModelObject{
Property1=“foo”,
Property2=真,
ToDos=新实体集{
新ToDoItem(),
}
};
不过,这似乎不是个好主意,我实际上建议将二传员保密

或者,如果确实希望能够分配任何
IEnumerable
,只需更改属性的类型即可:

public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
    get { return this._todos; }
    set { this._todos.Assign(value); }
}
[关联(存储=“\u todos”,OtherKey=“\u categoryId”,ThisKey=“Id”)]
公共可数TODO
{
获取{返回此。\u todos;}
设置{this._todos.Assign(value);}
}

您发布的代码有两个问题

我怀疑主要的问题是,当属性的类型为
EntitySet
(您发布的错误消息与您发布的代码不匹配,但没关系)时,您试图将属性的值设置为
列表
,您说“应该允许从
IEnumerable
进行赋值”,但我不知道你为什么会认为是这样,考虑到财产声明:

public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
    get { return this._todos; }
    set { this._todos.Assign(value); }
}
我假设您的真实代码更像这样:

SomeModelObject myModelObject = new SomeModelObject() {
  Property1 = "foo",
  ... 
};
请以后更加小心-很难诊断未发布的代码

实体集有三个选项

如果要向现有的
EntitySet
添加新项,可以在对象初始值设定项中执行此操作:

SomeModelObject myModelObject = new SomeModelObject {
  Property1 = "foo",
  Property2 = true,
  ToDos = {
    new ToDoItem(),
  }
};
或者,如果要设置属性本身的值,则需要创建一个新的
EntitySet

SomeModelObject myModelObject=新建SomeModelObject{
Property1=“foo”,
Property2=真,
ToDos=新实体集{
新ToDoItem(),
}
};
不过,这似乎不是个好主意,我实际上建议将二传员保密

或者,如果确实希望能够分配任何
IEnumerable
,只需更改属性的类型即可:

public EntitySet<ToDoItem> ToDos { ... }
[Association(Storage = "_todos", OtherKey = "_categoryId", ThisKey = "Id")]
public IEnumerable<ToDoItem> ToDos
{
    get { return this._todos; }
    set { this._todos.Assign(value); }
}
[关联(存储=“\u todos”,OtherKey=“\u categoryId”,ThisKey=“Id”)]
公共可数TODO
{
获取{返回此。\u todos;}
设置{this._todos.Assign(value);}
}

首先,是的,你是对的,我已经调整了代码,以尝试获得最简单的案例-我已经更新了问题。其次,我认为可以将IEnumerable分配给实体集的原因是,setter使用
assign
并据此接受IEnumerable。@Brendan:
assign
接受
IEnumerable
,但这不是属性的类型,是吗?
Assign
的使用只是一个实现细节。好吧,这太棒了,它现在使用类型化的
EntitySet
进行编译,但是如果我正在创建一个新对象,那么
ToDos
属性在什么条件下会预先存在?@Brendan:如果包含该对象的构造函数创建了它?(正如您在查看的示例代码中所做的那样…)首先,是的,您是对的,我调整了代码以尝试获得最简单的情况-我更新了问题。其次,我认为可以将IEnumerable分配给实体集的原因是,setter使用
assign
并据此接受IEnumerable。@Brendan:
assign
接受
IEnumerable
,但这不是属性的类型,是吗?
Assign
的使用只是一个实现细节。好吧,这太棒了,它现在使用类型化的
EntitySet
进行编译,但是如果我正在创建一个新对象,那么
ToDos
属性在什么条件下会预先存在?@Brendan:如果包含该对象的构造函数创建了它?(正如您在查看的示例代码中所做的那样…)