在 var 数组中存储两个不同的对象?
Posted
技术标签:
【中文标题】在 var 数组中存储两个不同的对象?【英文标题】:Store two different objects in a var array? 【发布时间】:2013-06-20 12:45:25 【问题描述】:有没有办法在 C# 中将几个不同的视图模型对象存储在一个 var 数组中?
示例:
var user_model = db.Database.SqlQuery<User>("SELECT * FROM [User]").ToList();
var product_model = db.Database.SqlQuery<Product>("SELECT * FROM [Product]").ToList();
var my_models = new[] user_model, product_model ;
string[] object_titles = "User" , "Product" ;
for( int i=0 ; i<my_models.Length ; i++ )
if( my_models[i].Count() != 0 )
return View("../"+ object_titles[i] +"/Index", my_models[i]);
不幸的是,上面的例子不起作用,我不知道如何解决这个问题。 谁能给我一个提示,如何解决?
【问题讨论】:
你有什么异常吗? “不起作用”是对您遇到的任何问题的绝对可怕描述,我很确定这也不是您收到的任何错误消息的文本...... 这段代码应该做什么?我有点困惑? @DimitarDimitrov 是的,我也被抛出了一个循环(不是双关语)。在我第三次阅读时,我终于明白他们想要返回第一个包含数据的模型的视图。我认为... 对不起,我没有描述我的代码的目的。上面的例子只是原始代码的一个非常简单的版本。我正在编写一个搜索函数,它使用 sql 查询 (WHERE LIKE('%my_name%')...) 来遍历数据库表以查找任何结果。如果找到用户名或其他内容,则返回该对象的索引视图(列表),您可以在其中编辑或删除现在显示在索引视图列表中的找到的结果。 【参考方案1】:如果我理解错了,请原谅我,但是,这不是很容易吗:
var user_model = db.Database.SqlQuery<User>("SELECT * FROM [User]").ToList();
var product_model = db.Database.SqlQuery<Product>("SELECT * FROM [Product]").ToList();
if(user_model.Any())
return View("../User/Index", user_model);
else if(product_model.Any())
return View("../Product/Index", product_model);
// return a default view or some other magic ...
【讨论】:
是的,我实际上是这样解决的,但我使用的对象比两个多得多。所以这将是一个很长的 if 语句。 ;)【参考方案2】:var my_models = new IEnumerable<object>[] user_model, product_model ;
试试这个
【讨论】:
你最好使用接口或基类。每次都回溯到一个对象并不是最好的方法,因为单独查看您的列表实际上并不能表明您正在查看/查看的对象类型,并且使得在其他领域进行编程变得更加困难。跨度>以上是关于在 var 数组中存储两个不同的对象?的主要内容,如果未能解决你的问题,请参考以下文章