我正在创建一个可以从dicom文件中读取的类。这基本上是一个填充了大量对象的二进制文件。我想创建一个可以做到这一点的可靠类。所以我设计了以下内容。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Medicom
{
public class DDocument : IEnumerable<DDataElement>
{
/// <summary>
/// Creates a new DDocument from a file.
/// </summary>
/// <param name="path">The path of the file to load </param>
/// <returns>An DDocument that contains the Dicom information from the file</returns>
public static DDocument Load(string path)
{
return DDocument.Load(new FileStream(path, FileMode.Open));
}
/// <summary>
/// Creates a new XDocument instance by using the specified stream.
/// </summary>
/// <param name="stream">The stream that contains the Dicom information.</param>
/// <returns>An DDocument that contains the Dicom information from the stream.</returns>
public static DDocument Load(Stream stream)
{
//Logic here to read the whole stream and List<DDataElement> Data with all the data
}
/// <summary>
/// Gets or sets a list with MetaInformation containing DDataElements
/// </summary>
public List<DDataElement> Data
{
get;
set;
}
/// <summary>
/// Returns an enumerator that can be used to iterate through the DDocument
/// </summary>
/// <returns>An IEnumerator that can be used to iterate through the DDocument</returns>
public IEnumerator<DDataElement> GetEnumerator()
{
foreach (DDataElement dataElement in Data)
{
yield return dataElement;
}
}
}
}
我想知道你对它的看法。你在这堂课上会有什么变化吗?
答案 0 :(得分:3)
两件事:
首先,您应该在完成后关闭FileStream
:
public static DDocument Load(string path)
{
using(FileStream fs = new FileStream(path, FileMode.Open)) {
return DDocument.Load(fs);
}
}
其次,List
已经非常好了IEnumerable
!你应该使用它!
public IEnumerator<DDataElement> GetEnumerator()
{
return (IEnumerator<DDataElement>)Data.GetEnumerator();
}
答案 1 :(得分:2)
就建议而言,我会让你的班级名字更有意义。 DicomDocument和DicomElement只是更具描述性,其他任何使用您代码的人都会立即知道它们是什么(特别是如果他们熟悉DICOM结构)。
答案 2 :(得分:1)
我会问自己一些关于这个类的消费者如何访问该类数据的问题:
我得到的是你可能想要一种更健壮的方式在DicomDocument中存储你的DicomDataElements,你可能想要通过IEnumerable以外的其他方式来访问标签。对于DICOM文件,SortedDictionary可能是保存DICOM数据元素列表的最佳方法。它可以通过DICOM标记使它们保持正确的顺序,并提供对标签的随机访问。您可能还希望类上的索引器提供对标记的随机访问。
答案 3 :(得分:0)
有许多基于JAVA的开源DICOM实现,如dcm4che2。您是否考虑过将其实施移植?