问题描述
我试图降低自定义 ORM 的复杂性,因此我正在尝试做这样的事情:
我的问题是我需要实现一个 out params Model[] 变量
像这样,
public bool GetEntities(params out Model[] models)
或
public bool GetEntities(out params Model[] models)
但是看起来我的语法对编译器无效,您是否有解决问题的想法以返回不确定数量的对象作为输出参数而不实现 IEnumerable,例如数组,列表,字典......运行时快一点?
跟随块可以清楚地让您看到问题。
public class Model
{
}
public class Entity1 : Model
{
}
public class Entity2 : Model
{
}
public class EntityN : Model
{
}
public class FooDBContext
{
private IDictionary<string,object> rows;
public void SetsqlRecord(IDictionary<string,object> row)
{
// This function sets a local dictionary that will be used to perform the multicast.
}
public IEnumerable<IEnumerable<object>> HasNext()
{
// this returns the current row returned by the query
yield return null;
}
public bool TryExecutesql(string sql )
{
//execute
return true;
}
public void SetValues(params Model[] models)
{
}
public bool GetEntities(params out Model[] models)
{
}
}
public class Program
{
public static void Main()
{
var a = new FooDBContext();
string sql = "Select Entity1.*,Entity1.*,Entity2.*,EntityN.*,Entity2.* FROM Entity1,Entity1,Entity2,EntityN,Entity2 where (expression)";
a.TryExecutesql(sql);
foreach(var row in a.HasNext())
{
a.GetEntities(out Entity1 e1_1,out Entity1 e1_2,out Entity2 e2_1,out EntityN en_1,out Entity2 e2_2 );
a.GetEntities(out e1_1,out e1_2);
}
}
}
解决方法
我认为做你想做的事情是不可能的。而是向参数添加一个集合并将其设置为输出参数。我建议做这样的事情:
public bool GetEntities(out IList<Model[]> outputModel,params Model[] models)
{
//method logic here
//some assignment to argument outputModel
// eg. outputModel.Add(//)
// return true or false
}