FileHelper无法在其类中处理ReSharper排序变量

时间:2016-09-07 11:26:53

标签: c# resharper filehelpers

我有代码这样做:

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

有没有办法告诉类,定义的变量的顺序是无关紧要的?变量的定义顺序突然变得相关,与我见过的任何其他类相反,我觉得非常令人不安和奇怪。

1 个答案:

答案 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#无论如何都是......