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