【发布时间】:2016-04-02 00:44:34
【问题描述】:
我正在使用三元运算符,但它具有很大的性能低效问题是否有等效的解决方案来解决低效问题?
鉴于我们有两个列表,我们希望使用 linq 从一个列表中进行选择:
var myList1 = new List<string>();
var myList2 = new List<string>();
var result =
myList1.Select(x => new {
Id = x,
Count = myList2.Count(y => y == x) == 0 ? "Not Found"
: myList2.Count(y => y == x).ToString()
});
现在使用三元运算符?:我在这里展示了 linq 表达式将首先检查计数是否为 0 并显示“未找到”,否则它将再次运行 linq 计数并显示结果。我的观点是,当它只需要存储值并在 else 中再次使用它时,它将运行两次 linq 查询。如果 linq 查询更大更复杂,这似乎非常低效。
我知道三元运算符应该只用于简单的方程,例如我 > 1 ? true : false 但是在 linq 查询中有什么替代方法,因为我不能先存储该值以再次使用。
更新:
这是一个关于三元运算符的理论问题,因为如果条件适用,它需要运行相同的方程两次。当方程大而复杂时使用效率太低?
【问题讨论】:
-
这还能编译吗?您的条件运算符返回
int或string。 -
慢的不是三元运算符。
-
性能低下是因为
myList2.Count(y => y == x)改成myList2.Where(y => y == x).Count() -
@EʜsᴀɴSᴀᴊᴊᴀᴅ,没有。只是没有。
标签: c# linq ternary-operator