我有代码这样做:
var engine = new FileHelperEngine<SampleType>();
var records = engine.ReadString("asdf|fdsa");
var showString = records[0].Field1 + records[0].Field2;
SampleType类如下所示:
[DelimitedRecord("|")]
public class SampleType
{
public string Field2;
public string Field1;
}
结果集如下:
records[0].Field1
的值为fdsa
records[0].Field2
的值为asdf
如果我运行ReSharper清理,它将按字母顺序对变量进行排序。 SampleType类看起来像这样:
[DelimitedRecord("|")]
public class SampleType
{
public string Field1;
public string Field2;
}
但是现在我的程序逻辑发生了变化。
records[0].Field1
的值为asdf
records[0].Field2
的值为fdsa
有没有办法告诉类,定义的变量的顺序是无关紧要的?变量的定义顺序突然变得相关,与我见过的任何其他类相反,我觉得非常令人不安和奇怪。
答案 0 :(得分:3)
我不完全确定,但我认为你想要一种方法让FileHelpers使用明确指定的字段排序,而不是隐含的&#39;它们的顺序在来源中定义&#39;。
如果我没错,您需要FileHelpers库中的the FieldOrder
attribute:
使用[FieldOrder]属性强制字段顺序:
//-> You first declare a Record Mapping class: Input.txt 10248|VINET|04071996|32.38 10249|TOMSP|05071996|11.61 10250|HANAS|08071996|65.83 10251|VICTE|08071996|41.34 RecordClass.cs [DelimitedRecord("|")] public class Orders { [FieldOrder(20)] public string CustomerID; [FieldConverter(ConverterKind.Date, "ddMMyyyy")] [FieldOrder(30)] public DateTime OrderDate; [FieldConverter(ConverterKind.Decimal, ".")] // The decimal separator is "." [FieldOrder(40)] public decimal Freight; [FieldOrder(10)] public int OrderID; }
关于你的评论
然而,我很惊讶这种解决问题的方法 在这样的图书馆似乎你。而且,对于记录,这不是 合乎逻辑的,并且为了能够理解它,你必须&#34;过度思考&#34; :p它不是语言设计的一部分
你是对的,因为FileHelper的默认操作模式(使用字段的源排序作为其记录中的顺序)不是本地的&#39; C#,确实不是特别的#C#-ish&#39;做事方式;但是,如果FileHelpers的作者和用户想要它,那就没关系。它确实具有更具动态语言风格的味道,但是那时有点 C#无论如何都是......