欧美性猛交xxx嘿人猛交_又色又爽又高潮免费观看_精品国产一区二区三区久久影院_青娱乐极品视觉盛宴国产视频

技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統
網站運營

贊助商

分類目錄

贊助商

最新文章

搜索

C# CSV解析器TinyCsvParser使用示例:自定義映射

作者:admin    時間:2023-5-22 11:46:12    瀏覽:

在前面文章中,我介紹了C# CSV解析器TinyCsvParser的一下使用示例,你可參閱:

在本文中,我將繼續介紹TinyCsvParser使用示例:自定義映射。

自定義映射

在某些情況下,你可能需要以非 1:1 的方式將 CSV 列映射到輸出實體的屬性,或者你的輸出實體可能包含其他非標量類型,你需要使用 CSV 行中的多個列來填充這些類型。這就是MapUsing發揮作用的地方。MapUsing 接受一個委托,該委托將為 CSV 中的每個非空、非注釋行調用。對提供的委托的調用發生在為該行執行了所有MapProperty映射之后,因此你的實體可能在你的委托執行時部分填充了數據。

例子

首先,與任何其他映射一樣,你需要建立CsvMapping<MyEntity>。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class MyEntity
{
    public string OrderId { get; set; }
    public Person Customer { get; set; }
}

// CSV format: 1234,Doe,John
public class MyMap : CsvMapping<MyEntity>
{
    public MyMap()
    {
        MapProperty(0, x => x.OrderId);
        // TODO: Map person using MapUsing()
    }
}

添加MapUsing

現在我們將第一列映射到 OrderId,但是我們如何將第二列和第三列映射到我們Person類的實例呢? 使用MapUsing

// CSV format: 1234,Doe,John
public class MyMap : CsvMapping<MyEntity>
{
    public MyMap()
    {
        MapProperty(0, x => x.OrderId);
        MapUsing((entity, values) =>
        {
            // TODO: Invalidate the row if first name is missing.

            var customer = new Person();

            // WARNING: IndexOutOfRangeException could happen here!!
            customer.LastName = values.Tokens[1];
            customer.FirstName = values.Tokens[2];

            entity.Customer = customer;

            return true;
        });
    }
}

開始保護

現在我們的MyEntity類將正確填充訂單 ID 和一個Person具有正確名字和姓氏集的實例。但是,如果我們遇到缺少名字的行,比如“1234,Acme Inc”,會發生什么情況?這是個壞消息,尤其是如果多行可能缺少第三列……每一行都會引發異常,這對解析性能非常不利。這就是為什么我們要求你的MapUsing委托返回一個布爾值,指示你映射的數據是否產生有效行。

注意:你應該避免做可能在你的委托中引發異常的事情,即使你使用try...catch,引發異常的事實會極大地減慢你的 CSV 解析速度,即使它被捕獲并丟棄也是如此。

// CSV format: 1234,Doe,John
public class MyMap : CsvMapping<MyEntity>
{
    public MyMap()
    {
        MapProperty(0, x => x.OrderId);
        MapUsing((entity, values) =>
        {
            // Checking that we have enough data and that the data is within range
            // should happen before we try to access & map it below.
            if(values.Tokens.Length < 3)
            {
                return false;
            }

            var customer = new Person();

            customer.LastName = values.Tokens[1];
            customer.FirstName = values.Tokens[2];

            entity.Customer = customer;

            return true;
        });
    }
}

總結

本文介紹了C# CSV解析器TinyCsvParser使用示例:自定義映射,你還可以參閱TinyCsvParser其他使用示例,請看文章:

相關文章

標簽: asp.net  CSharp  CSV  TinyCsvParser  
x