如何使用List压缩一堆IF语句 - 是否可能?

时间:2010-08-06 19:44:36

标签: c# list

所以我有两个“文件”,都有很多属性。一个文档是已填写的文档的实例。我需要检查属性中是否有“值”(因为它们主要是可以为空的?),如果是,则将当前属性的值赋给另一个文档的属性。

实施例

if (documentA.FirstProperty.HasValue)
{
    documentB.FirstProperty = documentA.FirstProperty
}

但有没有办法让这个更清楚?我想也许我可以创建一个文档类型列表并使用foreach循环并检查当前属性是否有值,如果是,则将其分配给新文档。

已经获得了一个名为 oldDocument

的文档实例

示例:

List<oldDocument> listOfProperties = new List<oldDocument>();

foreach (var property in listOfProperties)
{
    if (property.HasValue)
    {
        documentB.property = documentA.property;
    }
}

foreach循环中的变量“property”是否代表属性的名称?

2 个答案:

答案 0 :(得分:3)

你可以使用linq。

var nullProps = doc1.SelectMany(d => d.Props).Where(prop => prop == null); 
//Assign
foreach(var prop in nullProps)
     doc1.Prop[prop.Name] = doc2.Prop[prop.Name];

答案 1 :(得分:3)

Null coalesce至少可以简化赋值块:

DocumentA.FirstProperty = DocumentB.FirstProperty ?? DocumentA.FirstProperty;