Nul*_*nce 6 .net c# anonymous-types
假设我有以下匿名类型
var g = records.Select(r => new
{
Id = r.CardholderNo,
TimeIn = r.ArriveTime,
TimeOut = r.LeaveTime,
});
Run Code Online (Sandbox Code Playgroud)
是否可以执行如下操作:
var g = records.Select(r => new
{
Id = r.CardholderNo,
if (condition)
{
TimeIn = r.ArriveTime;
},
TimeOut = r.LeaveTime,
//many more properties that I'd like to be dependant on conditions.
});
Run Code Online (Sandbox Code Playgroud)
如何根据条件实现匿名类型?
您可以使用三元运算符来做到这一点: ?:
语法是这样的:
TimeIn = condition ? r.ArriveTime : (DateTime?)null // Or DateTime.Min or whatever value you want to use as default
Run Code Online (Sandbox Code Playgroud)
在考虑了你的问题几分钟后,我想出了以下你永远不应该使用的代码;)
using System;
class Program
{
static void Main(string[] args)
{
DateTime dt = DateTime.Now;
bool condition = true;
dynamic result = condition ?
(object)new
{
id = 1,
prop = dt
}
:
(object)new
{
id = 2,
};
Console.WriteLine(result.id);
if (condition) Console.WriteLine(result.prop);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码永远不应该在生产中使用,因为它的可读性很差,而且很容易出错。然而,作为学习该语言的可能性的示例,它非常好。
不直接使用if语句,但您可以使用三元运算符来执行此操作(假设TimeIn类型为DateTime):
var g = records.Select(r => new
{
Id = r.CardholderNo,
TimeIn = condition ? r.ArriveTime : (DateTime?)null;
TimeOut = r.LeaveTime
});
Run Code Online (Sandbox Code Playgroud)
请注意,这将使该属性始终出现在您的匿名类型中。如果这不是所需的行为,那么您就不能这样做。
我建议考虑代码的可读性,而不仅仅是“如何缩短这几行,使其看起来整洁”。