0

我有一堂课:

    public class PicDetailsClass : ISerializable
{
    public string Exif_Image_Make { get; set; }
    public string Exif_Image_Model { get; set; }
    public string Exif_Image_Orientation { get; set; 

.....(我想在这个类中存储超过 200 个不同的字符串)

}

然后我有一个包含以下数据的文本文件:

Exif.Image.Make,ASCII,NIKOND
Exif.Image.Model,ASCII,D5100
...

我想要做的是根据第一列(Exif.Image.Make 或其他任何内容)读取文本文件,然后我想以第 2 列(ASCII)中所述的形式存储第 3 列中的数据到一个我可以最终存储在 XML 或 SQL 中的列表。

我已经完成了像上面的示例一样创建类的部分,现在逐行阅读文本文件,我能够将每一列存储在一个数组中,但不知道现在如何将它们存储在一个列表中使用 if 语句一一进行

using (StreamReader reader = new StreamReader(File))
            {
                string line;
                PicDetailsClass Details = new PicDetailsClass();
                while ((line = reader.ReadLine()) != null)
                {
                    string allText = Regex.Replace(line, @"\s+", ",");
                    string[] myString = Regex.Replace(line, @"\s+", ",").Split(',');

                    foreach (string column in myString)
                    {
                        string Type = myString[0];

if (Type == "Exif.Image.Make")
                        {
                            Details.Exif_Image_Make = myString[3];
                        }
                    }
                }

                reader.Close();
            }
4

1 回答 1

1

这听起来像是你可以用一些基于反射的魔法来解决的问题:-)

只要类型列与您的属性名称匹配,如果您替换 . 使用 _ 然后您可以执行以下操作(我脑海中的伪代码):

// Use the following
while ((line = reader.ReadLine()) != null)
{
  var allText = Regex.Replace(line, @"\s+", ",");
  var myString = Regex.Replace(line, @"\s+", ",").Split(',');
  var propertyName = myString[0].Replace(".", "_");
  var property = typeof(Details).GetProperty(propertyName);
  property.SetValue(Details, myString[3]);
}

这将尝试通过查看第 0 列并替换来确定属性名称。和 _。然后它将从 Details 对象的类型中获取对该属性的引用,最后将值分配给找到的属性。

这里没有错误检查,因此您可能会添加它,并且没有类型转换,但是如果您需要它们,两者都可以轻松添加。

于 2013-06-19T09:05:32.610 回答