【发布时间】:2013-10-08 23:15:45
【问题描述】:
public List<Tuple<int, int, int, string, int, int, Tuple<bool, bool, int?>>>
GetValues(int someId, int someOtherlId)
{
var t = new List<Tuple<int, int, int, string, int, int, Tuple<bool, bool, int?>>>();
using (var context = new Entities(ConnString))
{
var pc = context.SomeTable.Where(c => c.SomeId == someId &&
c.SomeOtherId == someOtherId).OrderBy(c => c.Id).ToList();
t.AddRange(pc.Select(cols => new Tuple<int, int, int, string, int, int, Tuple<bool, bool, int?>>
(cols.Id, cols.someId, cols.someOtherId, cols.ColumnName, cols.MinDataLength,
cols.MaxDataLength, new Tuple<bool, bool, int?>(cols.Required, cols.Eav.HasValue && cols.Eav.Value,
cols.AttribId.HasValue ? cols.AttribId.Value : null))));
}
return t;
}
}
无法弄清楚为什么此代码无法编译并生成“'int' 和 'null' 之间没有隐式转换”错误。
在那第二个元组中,int?一直被标记为可为空,所以为什么它在t.AddRange 中被编译器检测为正常的 int,这会在@987654324 处生成“无法确定条件表达式的类型,因为 'int' 和 '' 之间没有隐式转换”错误@。
有什么想法吗?
【问题讨论】:
-
Tuple太可怕了!至少将该类扩展为自定义类! -
@m-y 也许吧,但作为一种将数据从 DAL 传输到 BI 层的方法,它肯定胜过 DTO……至少在我的书中。
-
只是将元组扩展为一个更简单的名称,元组不是密封的。
-
@m-y 我明白了,这是个好主意,谢谢。