C# 新对象分配中的条件?

C# 新对象分配中的条件?,c#,linq,C#,Linq,什么是速记,或者我不应该这样做? 我是否调用方法进行检查 bool assign=value; objectsList = from o in objects select new { id=o.id, name=o.name or "" (if assign==false), } 你是说: bool as

什么是速记,或者我不应该这样做? 我是否调用方法进行检查

 bool assign=value;
 objectsList = from o in objects select new {
                              id=o.id,
                              name=o.name or "" (if assign==false),

                                }

你是说:

bool assign=value;
var objectsList = from o in objects select new {
    id=o.id,
    name=(assign ? o.name : String.Empty)
};

PS:小心延迟执行-检查赋值将在您使用它时发生,而不是在您声明select语句时发生。

您的意思是:

bool assign=value;
var objectsList = from o in objects select new {
    id=o.id,
    name=(assign ? o.name : String.Empty)
};

PS:小心延迟执行-检查赋值将在您使用它时发生,而不是在您声明select语句时发生。

这一点很好,但您可以更一般。无论“对象”是否可查询,都会在使用它的位置进行检查。“objectsList”只是一个表示查询的对象;它不会执行,直到你对它做一些事情使它运行。因此,在投影过程中,检查的执行总是在那个时候发生,使用的是当时“assign”中碰巧出现的任何值。我甚至没有意识到IEnumerable实现Select时也会发生这种情况。我做了一些测试,你肯定是对的。谢谢你的提醒。说得好,但你可以更一般一些。无论“对象”是否可查询,都会在使用它的位置进行检查。“objectsList”只是一个表示查询的对象;它不会执行,直到你对它做一些事情使它运行。因此,在投影过程中,检查的执行总是在那个时候发生,使用的是当时“assign”中碰巧出现的任何值。我甚至没有意识到IEnumerable实现Select时也会发生这种情况。我做了一些测试,你肯定是对的。谢谢你的提醒。