C# “将具体对象制作为类型”;“对象”;失去财产
如果我有以下课程C# “将具体对象制作为类型”;“对象”;失去财产,c#,C#,如果我有以下课程 Person { string FirstName {get;set;} string LastName {get;set;} } 在另一节课上,我做了以下几点 OtherClass { List<Person> personList = new List<Person(/*10 people in here*/); List<Object> personObjectList = new List<Object>(); fo
Person {
string FirstName {get;set;}
string LastName {get;set;}
}
在另一节课上,我做了以下几点
OtherClass {
List<Person> personList = new List<Person(/*10 people in here*/);
List<Object> personObjectList = new List<Object>();
foreach (Person p in personList) {
personObjectList.Add(p);
}
}
为什么无法识别此对象具有FirstName
属性?我没有意识到更改对象的类型会使其失去属性
谢谢你它没有失去它的属性;编译器只是不知道它们的存在。要获取属性,您需要将其强制转换回
人员
name = ((Person)personObjectList[0]).FirstName;
或
如果强制转换失败,第一个样式将引发异常。如果强制转换失败,第二种样式将返回
null
,因此如果这样做,您应该检查null
。它不会丢失其属性;编译器只是不知道它们的存在。要获取属性,您需要将其强制转换回人员
name = ((Person)personObjectList[0]).FirstName;
或
如果强制转换失败,第一个样式将引发异常。如果强制转换失败,第二种样式将返回
null
,因此如果这样做,您应该检查null
。您有两个主要选择。按照我建议的顺序。。它们是:
为每个视图创建视图模型。这些是UI层中的对象,表示各个视图的特定数据。将域模型映射到控制器中的视图模型。在这方面,库喜欢并可以帮助您删除大量管道代码。只是要小心不要在映射中引入业务逻辑
这有两个主要好处:
- 您的视图可以使用强类型视图模型,而不是到处强制转换
- 您的视图模型和域模型可以独立发展
Html.HiddenFor
(
)来在页面之间持久化数据,这很快就会成为您要处理的噩梦
此外,拥有独立的视图模型允许模型独立地发展。您的域模型可能具有与业务需求相关的属性,但您的视图模型可以包含纯粹与UI相关的属性。诸如UI级验证、聚合属性(例如视图模型中的FullName
,而不是FirstName
+姓氏
)。灵活性真的很好
其次,与我上面所说的相反,您可以在视图顶部放置一个@using
指令,以包含对象所在的名称空间。这允许您在视图中使用模型
我强烈建议你调查一下我给你的第一个选择。在以后的项目中,您会感觉更好。您有两个主要选择。按照我建议的顺序。。它们是: 为每个视图创建视图模型。这些是UI层中的对象,表示各个视图的特定数据。将域模型映射到控制器中的视图模型。在这方面,库喜欢并可以帮助您删除大量管道代码。只是要小心不要在映射中引入业务逻辑 这有两个主要好处:
- 您的视图可以使用强类型视图模型,而不是到处强制转换
- 您的视图模型和域模型可以独立发展
Html.HiddenFor
(
)来在页面之间持久化数据,这很快就会成为您要处理的噩梦
此外,拥有独立的视图模型允许模型独立地发展。您的域模型可能具有与业务需求相关的属性,但您的视图模型可以包含纯粹与UI相关的属性。诸如UI级验证、聚合属性(例如视图模型中的FullName
,而不是FirstName
+姓氏
)。灵活性真的很好
其次,与我上面所说的相反,您可以在视图顶部放置一个@using
指令,以包含对象所在的名称空间。这允许您在视图中使用模型
我强烈建议你调查一下我给你的第一个选择。在以后的项目中,您会感觉更好。您应该将
对象
显式转换为人
(personObjectList[0]作为人)。FirstName是一个MVC应用程序,我在控制器中部分转换,然后在视图中部分转换,问题是视图不知道模型。。。因此,视图不知道类型Person是否使用强类型视图?您可以使用动态
而不是对象
。。。还有可能是强类型的解决方案(但您需要提供关于哪些不起作用的更多详细信息)。您应该将对象
显式转换为人
(personObjectList[0]作为人)。FirstName是一个MVC应用程序,我在控制器中部分转换,然后在视图中部分转换,问题是视图不知道模型。。。因此,视图不知道类型Person是否使用强类型视图?您可以使用动态
而不是对象
。。。此外,可能还有强类型解决方案(但您需要提供有关哪些不起作用的更多详细信息)。无法强制转换,因为它在视图中,不知道模型,但我知道您在做什么saying@AbdulAhmad你有两个选择。首先,您可以在视图顶部使用指令弹出一个,这样视图就知道这些模型了。否则,您可以引入一个“视图模型”实体,将您的域对象映射到特定于t的模型
var person = personObjectList[0] as Person;
if (person != null)
name = person.FirstName;