我发布了一个问题,但需要澄清。我是初学者。
在这种情况下,我不确定“强类型属性”一词的含义是什么? syntax offered by the responder to my original post是我所追求的,但是当我在网上搜索该术语时,它仅提供了定义和示例,而没有提供有关如何在用户定义的类中实现的有用示例。
这是否最好与强类型属性一起使用,例如 h.Segments [“ PID”]。Fields [5] .Subfields [3] .SubSubFields [2]? –拉瑟 VågsætherKarlsen 8月19日7:25
总体而言,我的目标是
理想情况下,我想创建和对象类似
HL7Message h = new HL7Message;
string name = h.segment[2].field[5].subfield[0];
如何创建和访问其属性本身具有属性的对象?
答案 0 :(得分:3)
您真的在考虑这个问题。在这种情况下,强类型仅表示您拥有明确表示自己的类。这实际上只是底层的面向对象编程。
即Segment
是类,Field
是 class ,具有简单类型和其他强类型类的属性,例如
如果您需要细分的更多信息,只需向其添加更多属性,依此类推
给出
public class HL7Message
{
public List<Segment> Segments { get; set; }
}
public class Segment
{
public string Name { get; set; }
public List<Field> Fields { get; set; }
}
public class Field
{
public string Name { get; set; }
public List<Field> Fields { get; set; }
}
设置
var message = new HL7Message()
{
Segments = new List<Segment>()
{
new Segment()
{
Name = "PID",
Fields = new List<Field>()
{
new Field()
{
Name = "SomeField",
Fields = new List<Field>()
{
new Field()
{
Name = "SomeSubField",
Fields = new List<Field>()
{
new Field()
{
Name = "SomeSubSubField",
}
}
}
}
}
}
}
}
};
用法
var someResult = message.Segments[1].Fields[1].Fields[1];
注意 :这并不是要构建您的应用程序,而只是解决您在许多问题上遇到的困惑
答案 1 :(得分:1)
另一种可能且更简洁的方法可能是将其简化为自引用类或节点模型(例如,XML或示例中@TheGeneral的同一Field
类@TheGeneral),在其中您可以有sub-sub -sub-sub-sub ...字段,如果需要的话。这样,每个节点都是相同的(即可预测的),并且具有相同级别的功能支持。
注意:下列类中的构造函数确保始终初始化Children
属性,以避免处理空值。
using System;
using System.Collections.Generic;
public class HL7Node
{
public IDictionary<string, object> Fields {get; set; }
public List<HL7Node> Children { get; set; }
public HL7Node()
{
Children = new List<HL7Node>();
}
}
用法示例(另请参见https://dotnetfiddle.net/EAh9iu):
var root = new HL7Node {
Fields = new Dictionary<string, object> {
{ "fname", "John" },
{ "lname", "Doe" },
{ "email", "jdoe@example.com" },
},
};
var child = new HL7Node {
Fields = new Dictionary<string, object> {
{ "fname", "Bob" },
{ "lname", "Doe" },
{ "email", "bdoe@example.com" },
},
};
var grandChild = new HL7Node {
Fields = new Dictionary<string, object> {
{ "fname", "Sally" },
{ "lname", "Doe" },
{ "email", "sdoe@example.com" },
},
};
var greatGrandChild = new HL7Node {
Fields = new Dictionary<string, object> {
{ "fname", "Ray" },
{ "lname", "Doe" },
{ "email", "rdoe@example.com" },
},
};
root.Children.Add(child);
root.Children[0].Children.Add(grandChild);
root.Children[0].Children[0].Children.Add(greatGrandChild);
var message = string.Format("Grandchild's name is {0}", root.Children[0].Children[0].Fields["fname"]);
我不知道您的HL7消息交换的命名约定要求是什么,但是也许仍有一些机会仍然可以使用序列化 decorators (即Newtonsoft.Json.JsonPropertyAttribute
),匿名对象,等