小提琴
实用程序功能:
public static string GetProperties<T>(string alias="")
{
if (alias.Length>0)
{
return typeof(T).GetProperties().Select(x => x.Name).Aggregate((x, y) =>
alias + " = " + alias + "." + x + "," + Environment.NewLine + alias + " = " + alias + "." + y + ",");
}
else
{
return typeof(T).GetProperties().Select(x => x.Name).Aggregate((x, y) => x + Environment.NewLine + y);
}
}
代码:
public class ContainerInLog
{
public int ContainerInLogID { get; set; }
public int ContainerInID { get; set; }
public int CargoID { get; set; }
public int LoadStatus { get; set; }
}
public static void Main()
{
string list = GetProperties<ContainerInLog>("y");
Console.WriteLine(list);
}
结果:
y = y.y = y.y = y.ContainerInLogID,
y = y.ContainerInID,,
y = y.CargoID,,
y = y.LoadStatus,
预期结果:
ContainerInLogID = y.ContainerInLogID,
ContainerInID = y.ContainerInID,
CargoID = y.CargoID,
LoadStatus = y.LoadStatus,
如果您真的坚持返回整个串联字符串,而不是返回枚举的字符串,我不会在这里使用Aggregate
,只需使用string.Join
即可。另外,您可以通过在Select
内部制定字符串来简化语句。例如:
return string.Join(
Environment.NewLine,
typeof(T)
.GetProperties()
.Select(x => $"{x.Name} = {alias}.{x.Name},"));
奖励:如果将分离器更改为$",{Environment.NewLine}"
,则可以删除内联逗号,并且在字符串末端将无法获得最终逗号(示例小提琴(。
@davidg在这里具有更好的解决方案,但是您的聚合出了什么问题:
.Aggregate((x, y) =>
alias + " = " + alias + "." + x + "," + Environment.NewLine + alias + " = " + alias + "." + y + ",");
Aggregate
选择器函数(您的(x,y)
(采用以下表格:
Func<TAccumulate,TResult> resultSelector
这意味着在您的情况下, x
是累积的汇总结果,例如 "ContainerInLogID = y.ContainerInLogID"
。
,但是要进行下一个汇总,您再次转换x
:alias + " = " + alias + "." + x
,制作"y = y.y = y.ContainerInLogID"
。依此类推,每个属性都添加"y = y."
的另一个前缀。