我有一个类,具有很少的属性,其中一些有XML注释(摘要).我想要做的是在应用程序中显示用户的摘要信息.所以我需要在代码中访问摘要文本,以便能够做到:Label1.Text = .......我该怎么做?
public class MyObject
{
public int ID { get; set; }
/// <summary>
/// very very very very extensive information about the city
/// </summary>
public string City { get; set; }
public DateTime Date { get; set; }
public int Value { get; set; }
public int DiffToPrev { get; set; }
}
class Program
{
static void Main()
{
var a = new MyObject();
var t = a.GetType().GetProperty("City");
Console.WriteLine(t....................
Run Code Online (Sandbox Code Playgroud)
请注意,XML注释不包含在生成的exe/dll文件中,因此您需要启用xml文件生成并分发它们.Consder使用属性为您的属性/方法/类/等提供运行时可用信息,因为XML注释可能不是为您要执行的操作而设计的.
无论如何,XML注释具有以下格式:
<?xml version="1.0"?>
<doc>
<assembly>
<name><!-- assembly name here --></name>
</assembly>
<members>
<!-- ... -->
<member name="M:Full.Type.Name.PropertyName">
<summary>
<!-- property summary here -->
</summary>
</member>
<!-- ... -->
</memebers>
</doc>
Run Code Online (Sandbox Code Playgroud)
因此,如果您仍然需要它,则需要加载XML注释文件并查找XML节点,描述您的属性(未经测试的代码,只是为了显示方法):
var a = new MyObject();
var t = a.GetType().GetProperty("City");
string xmlMemberName = "M:" + a.FullName + t.Name;
var xmlDoc = new XmlDocument();
xmlDoc.Load("you_xml_comments_file.xml");
var membersNode = xmlDoc.DocumentElement["members"];
string summary = "";
if(membersNode != null)
{
foreach(XmlNode memberNode in membersNode.ChildNodes)
{
if(memberNode.Attributes["name"].Value == xmlMemberName)
{
summary = memberNode["summary"].InnerText;
break;
}
}
}
Console.WriteLine(summary);
Run Code Online (Sandbox Code Playgroud)
更新:您还可以将XML注释文件作为嵌入式资源包含在内,这样您就永远不会忘记分发它,甚至编写一个小工具,将XML注释文件转换为.resx XML资源文件.
将XML注释文件作为嵌入资源包含:
现在您的xml注释作为资源包含在程序集文件中,可以通过以下方式加载:
XmlDocument doc;
using(var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(
"your_default_namespace" + "." + "your_xml_file_name.xml"))
{
doc.Load(stream);
}
Run Code Online (Sandbox Code Playgroud)
要从注释XML文件生成.resx:
.resx格式:
<root>
<!-- some header stuff which can be copy-pasted from any other valid .resx -->
<!-- ... -->
<data name="Your_Object_Full_Name_PropertyName" xml:space="preserve">
<value><!-- summary here --></value>
</data>
<!-- ... -->
</root>
Run Code Online (Sandbox Code Playgroud)
可以使用ResourceManager类从此.resx加载字符串.
| 归档时间: |
|
| 查看次数: |
3740 次 |
| 最近记录: |