2016-03-04 140 views
0

在Web上进行调查时,我发现获取文件内置属性值(如“作者”,“DateLastSaved”或“公司”)的唯一示例看起来像这样:使用_oledocumentproperties.SummaryProperties实例上的反射通过名称获取文件属性值

string filePath= @"C:\Users\ME\Desktop\PaperSpecs.docx"; 
DSOFile.OleDocumentProperties file = new DSOFile.OleDocumentProperties(); 
file.Open(filePath, false, DSOFile.dsoFileOpenOptions.dsoOptionDefault); 

Console.WriteLine("Author: " + file.SummaryProperties.Author.ToString()); 
Console.WriteLine("DateLastSaved: " + file.SummaryProperties.DateLastSaved.ToString()); 
Console.WriteLine("Company: " + file.SummaryProperties.Company.ToString()); 

让我们考虑由酒店名称以检索值......我的意思是实现有两个参数的函数有:i)DSOFile.OleDocumentProperties实例; ii)物业名称(string propName)。 我最初的想法,但我认为“最笨的办法”还包括在执行这一检查propName值,然后,根据该值的切换的情况下,返回相关_oledocumentproperties.SummaryProperties财产......这就是:

... 
string val= null; 
switch(propName) 
{ 
    case case "Author": 
    val= file.SummaryProperties.Author.ToString(); break; 
    case case "DataLastSaved": 
    val= file.SummaryProperties.DataLastSaved.ToString(); break; 
    ... 
    default: throw new Exception("Property not found"); 
} 
return val; 

但是我不喜欢这个解决方案,写“太长”而且“不容易”维护。也许有更好的方法来实现这个功能...例如使用C#Reflection的强大功能!我不太好处理的反思,但我一直试图做这样的事情:

... 
Type t = file.SummaryProperties.GetType(); 
System.Reflection.PropertyInfo p = t.GetProperty(propName); 
object value = p == null ? null : p.GetValue(file.SummaryProperties, null); 
return value.ToString(); 

的问题是,p实例总是null

我的问题是:你知道更好的方法来实现我正在寻找的功能吗?或者你可以调整我最后的代码提示来通过反射来解决我的问题吗? 谢谢你们!

回答

0

Here是答案......反射不会与COM对象一起使用。