我开始学习ASP.NET MVC,我有一些疑问。如何检查类是否是MVC中的Model类。我有PHP Codeigniter背景,其中所有模型都继承CI_Model。通过检查instanceof
运算符很容易弄清楚类是否是模型类,但在.NET MVC Model类中不扩展任何类。
那么如何通过C#Code判断一个类是否是一个模型类? MVC框架如何确定类是否是模型。我已将“模型”中的文件夹重命名为“Modelss”,但模型绑定仍与ModelState.IsValid
一起使用。非常感谢任何帮助。
答案 0 :(得分:1)
MVC应用程序中的大多数模型都是普通的旧CLR对象(POCO),它们通常没有基类,因为它不需要。如果需要,您可以更改它。
在以下示例中,假设您有一个名为
param
的对象从某个地方进来。
在C#中,您可以通过几种方式检查对象是否属于某种类型。您可以将对象强制转换为类型,如果没有异常,则转换成功。 这不再是首选方法了,但我想让你知道是否有选项。
try {
var myType = (MyModel)param; // cast happens here
// do something with myType
}
catch{
// cast failed
}
另一种方法是使用as
运算符。这是一种更好的方法,因为如果转换失败则不会抛出任何异常,只需在变量中获得null
。
var myType = param as MyModel;
if (myType != null) { // you have what you need.
...
}
另一种技术是is
运算符(另一种好方法)。这类似于as
,但返回一个布尔而不是对象,或者返回null,你可以在if
语句中内联它来进行转换,并在一行中分配一个变量代码。
if (param is MyModel myType){
// do something with myType
}
如果确实在模型中添加了基类,则可以在上面的示例中使用该类型而不是类名。如果需要,可以放弃基类并使用marker interface(没有属性的接口或在其中声明的函数),并检查该类型。
public interface IModel {}
public class MyModel : IModel {
...
}
if (param is IModel myType){
// do something with myType
}
BTW,更改项目中的文件夹名称没有任何区别,因为对于大多数应用程序类型,C#基于名称空间而不是文件夹结构。只要文件夹和类文件包含在项目中,并且引用了名称空间,一切都很好。
希望您发现此信息有用!