วิธีสร้างรายการ F # จากอินเทอร์เฟซที่จะใช้โดย C # / WPF

Aug 20 2020

ฉันเป็นมือใหม่ ระบุว่าแต่ละคลาสเหล่านี้แสดงถึงคลาสที่แตกต่างกันใน C #:

  1. รายละเอียดการติดต่อ
  2. อินเทอร์เน็ต
  3. เบอร์โทรศัพท์
  4. ที่อยู่

"รายการ" ที่สร้างขึ้นใน F # เพื่อยึดคอนกรีตประเภทต่างๆอย่างไร?

ประเภทข้างต้นทั้งหมดจะมีฟิลด์ทั่วไปของ:

  1. ชื่อ - สตริง

ภายนอกชื่อคอนกรีตทุกประเภทจะมีช่องและเนื้อหาที่แตกต่างกัน

ประเภท "รายการ" นี้จะถูกใช้โดย WFP / XAML

(ฉันคิดว่าจำเป็นต้องใช้อินเทอร์เฟซสำหรับรายการ F # แต่ฉันไม่รู้ว่าจะใช้งานอย่างไร - F # เป็นสิ่งใหม่สำหรับฉันจริงๆ :)

TIA

คำตอบ

3 ScottNimrod Aug 20 2020 at 19:03

พิจารณาใช้ Seq แทน List เพื่อช่วยเหลือลูกค้า C #:

ฉันขอแนะนำให้ใช้ลำดับ (เช่น seq) แทนรายการสำหรับการบริโภค C # ดังนั้นลำดับใน F # จึงเท่ากับ IEnumerable ใน C # ดังนั้นคุณจะสามารถใช้รายการเหล่านี้จากแอพ Windows ของคุณ

นี่คือวิธีที่ฉันจะใช้ข้อกำหนด:

type ContactDetail = { Name : string; Other:string }
type Internet      = { Name : string; Other:string }
type PhoneNumber   = { Name : string; Other:string }
type Address       = { Name : string; Other:string }

type MyType =
    | ContactDetails of ContactDetail seq
    | Internet       of Internet      seq
    | PhoneNumbers   of PhoneNumber   seq
    | Addresses      of Address       seq

let contactDetail  : ContactDetail = { Name="some name"; Other="???" }
let contactDetails = ContactDetails [contactDetail]

let internet       : Internet = { Name="some name"; Other="???" }
let internets      = Internet [internet]

let phoneNumber    : PhoneNumber = { Name="some name"; Other="???" }
let PhoneNumbers   = PhoneNumbers [phoneNumber]

let myTypes : MyType seq = seq [ contactDetails
                                 internets
                                 PhoneNumbers
                               ]
2 AnibalYeh Aug 20 2020 at 09:33

ขอโทษนะนี่คือสิ่งที่คุณต้องการใช่ไหม

F #

module FSharpTest.ListTest
open System


type YourType = Object

type ContactDetails = YourType
type Internet = YourType
type PhoneNumbers = YourType
type Addresses = YourType


type WrapperOfCSharpClass =
| CD of ContactDetails
| I of Internet
| PN of PhoneNumbers
| A of Addresses

let list = [
    Unchecked.defaultof<WrapperOfCSharpClass>
    CD (new ContactDetails())
    I (new Internet())
]

ค#

using System;
using FSharpTest;
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var fsharplist_item = ListTest.list[0];
            if (fsharplist_item.IsPN)
            {
                Console.WriteLine("I am a phone number");
            } else if (fsharplist_item.IsA)
            {
                Console.WriteLine("I am an address");
            }
        }
    }
}