Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FileHelper可以';t在其类中处理ReSharper排序变量_C#_Resharper_Filehelpers - Fatal编程技术网

C# FileHelper可以';t在其类中处理ReSharper排序变量

C# FileHelper可以';t在其类中处理ReSharper排序变量,c#,resharper,filehelpers,C#,Resharper,Filehelpers,我有这样做的代码: var engine = new FileHelperEngine<SampleType>(); var records = engine.ReadString("asdf|fdsa"); var showString = records[0].Field1 + records[0].Field2; 结果集如下所示: 记录[0]。字段1的值为fdsa 记录[0]。字段2的值为asdf 如果我运行ReSharper清理,它将按字母顺序对变量排序。SampleTy

我有这样做的代码:

var engine = new FileHelperEngine<SampleType>();
var records = engine.ReadString("asdf|fdsa");

var showString = records[0].Field1 + records[0].Field2;
结果集如下所示:

记录[0]。字段1
的值为
fdsa

记录[0]。字段2
的值为
asdf

如果我运行ReSharper清理,它将按字母顺序对变量排序。SampleType类将如下所示:

[DelimitedRecord("|")]
public class SampleType
{
    public string Field2;
    public string Field1;
}
[DelimitedRecord("|")]
public class SampleType
{
    public string Field1;
    public string Field2;
}
但是现在我的程序的逻辑已经改变了

记录[0]。字段1
的值为
asdf

记录[0]。字段2
的值为
fdsa


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

我不完全确定,但我认为您需要一种方法,让FileHelper为字段使用显式指定的顺序,而不是隐式的“它们在源代码中定义的顺序”

如果我是对的,您希望从FileHelpers库:

具有[FieldOrder]属性的强制字段顺序: 至于你的评论

然而,我很惊讶这种解决问题的方法有多好 在你看来,在这样一个图书馆里。我要说的是,这不是 合乎逻辑,要理解它,你必须“过度思考” :p这不是语言设计的一部分


您是对的,这里FileHelper的默认操作模式(使用字段的源顺序作为其在记录中的顺序)不是“原生”C#,实际上也不是一种特别的“C#ish”方式;但是,如果FileHelper的作者和用户希望这样做,那也没关系。它确实有一种更为动态的语言风格的味道,但这就是C#的发展方向……

我认为你有两个选择,1)停止ReSharper建议这是一种改进,或2)首先将字段按字母顺序排列。请记住,代码是我在解决方案中发现的内容的复制品(在字母表中,标题位于作者之后,但在csv文件中,标题位于第一位)。那么你是说这个库写得很差吗?如果在这个库存在的时候,在使用ReSharper时没有其他选择,我想我会放弃它。我不是说这个库写得很差。字段的顺序是(在实际情况中)似乎是明智的。因此,在这种情况下,您的唯一选择似乎是在这种情况下关闭ReSharper的此功能。我可以问一下为什么此解决方案是明智的吗?据我所知,它与我们以前在C#和OOP中所了解的关于类的所有内容都背道而驰。按照我的理解,它将C#带入函数ar中ea。如果我们这样做,我们可能会期望类中已定义方法的顺序也按照它们定义的顺序执行……这不是一个坏消息吗?我想你可能想得太多了。这个问题似乎是由文件中的顺序假设引起的,其中意义取决于值。理想情况下,你应该更改文件以使其灵活。但是,如果你真的无法更改文件,那么你将不得不接受它。太好了!文件顺序是:D,我想我在遵循对象中的语言指导原则时有点固执。一件事是,如果这是我的个人库,除了我之外没有人必须理解它。区别在于其他人都理解它要理解它,并做一些隐含的事情,这是不容易理解的。说如果作者想要它就可以了,这会导致将来有很多难以使用的库…:)当然,只要它有[FileOrder(10)]选项,我就没有问题:)
//-> 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;
}