2010-08-06 60 views
1

所以我有两个“文件”,都具有分配属性。一个文档是已填写文档的一个实例。我需要检查是否有“价值”的性质(因为他们主要是为空的诠释?),如果是当前属性值分配给其他文件的属性。如何使用列表压缩一堆IF语句 - 可以吗?

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循环变量“属性”将代表属性的名称?

回答

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]; 
+0

看来你的LINQ sugestion需要在列表的属性,但如果文档的实例只是一堆自动属性的,怎么我将它们加载到列表中? – pghtech 2010-08-06 20:33:45

+0

对于Linq,只需要接口IEnumerable 。所以我能想到的最好的事情就是创建一个临时Enumerable(即列表)并将所有属性添加到它中。您可以使用文档中的方法创建它,如下所示:List lst = doc.GetPropertiesAsList(); 这样你可以使用LINQ来解决这个问题。 – schoetbi 2010-08-07 14:16:39

3

空聚结至少可以简化分配块:

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