วิธีสร้างรายการ F # จากอินเทอร์เฟซที่จะใช้โดย C # / WPF
Aug 20 2020
ฉันเป็นมือใหม่ ระบุว่าแต่ละคลาสเหล่านี้แสดงถึงคลาสที่แตกต่างกันใน C #:
- รายละเอียดการติดต่อ
- อินเทอร์เน็ต
- เบอร์โทรศัพท์
- ที่อยู่
"รายการ" ที่สร้างขึ้นใน F # เพื่อยึดคอนกรีตประเภทต่างๆอย่างไร?
ประเภทข้างต้นทั้งหมดจะมีฟิลด์ทั่วไปของ:
- ชื่อ - สตริง
ภายนอกชื่อคอนกรีตทุกประเภทจะมีช่องและเนื้อหาที่แตกต่างกัน
ประเภท "รายการ" นี้จะถูกใช้โดย 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");
}
}
}
}