คำถามติดแท็ก c#

C # เป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่มีการจัดการและรวบรวมขยะที่สร้างขึ้นโดย Microsoft ควบคู่ไปกับแพลตฟอร์ม. NET

6
ปรัชญา / การใช้เหตุผลเบื้องหลังชื่อวิธีการปาสคาลของ C # คืออะไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันเพิ่งเริ่มเรียนรู้ C # มาจากพื้นหลังใน Java, C ++ และ Objective-C ฉันพบ Pascal-casing ของ method-ชื่อค่อนข้างไม่ซ้ำใครและตาดยากที่จะคุ้นเคยในตอนแรก อะไรคือเหตุผลและปรัชญาที่อยู่เบื้องหลังสิ่งนี้? ฉันเดาว่าเป็นเพราะคุณสมบัติ C # ไม่เหมือนกับใน Objective-C โดยที่ชื่อเมธอดสามารถเหมือนกับตัวแปรอินสแตนซ์ได้ทุกกรณีนี่ไม่ใช่กรณีที่มี C # ฉันเดาว่าหนึ่งในเป้าหมายที่มีคุณสมบัติ (เช่นเดียวกับภาษาส่วนใหญ่ที่สนับสนุน) คือการทำให้คุณสมบัติไม่สามารถแยกแยะได้อย่างแท้จริงจากตัวแปรและวิธีการ ดังนั้นหนึ่งสามารถมี "int x" ใน C # และคุณสมบัติที่สอดคล้องกันกลายเป็น X เพื่อให้แน่ใจว่าคุณสมบัติและวิธีการจะแยกไม่ออกชื่อวิธีการทั้งหมดที่ฉันคาดเดาดังนั้นจึงคาดว่าจะเริ่มต้นด้วยตัวอักษรตัวพิมพ์ใหญ่ (นี่เป็นเพียงสมมติฐานของฉันตามสิ่งที่ฉันรู้เกี่ยวกับภาษา C # - ฉันยังคงเรียนรู้อยู่) …

3
C # 8 การอ้างอิงที่ไม่เป็นโมฆะและรูปแบบลอง
มีรูปแบบในคลาส C # เป็นแบบสุดขั้วโดยDictionary.TryGetValueและint.TryParse: วิธีการส่งคืนบูลีนที่ระบุความสำเร็จของการดำเนินการและพารามิเตอร์ out ที่มีผลลัพธ์จริง หากการดำเนินการล้มเหลวพารามิเตอร์ out จะถูกตั้งค่าเป็น null สมมติว่าฉันใช้การอ้างอิงที่ไม่ใช่โมฆะ C # 8 และต้องการเขียนวิธี TryParse สำหรับคลาสของฉันเอง ถูกต้องลายเซ็นคือ: public static bool TryParse(string s, out MyClass? result); เนื่องจากผลลัพธ์เป็น null ในกรณีเท็จตัวแปร out ต้องถูกทำเครื่องหมายเป็น nullable อย่างไรก็ตามโดยทั่วไปจะใช้รูปแบบลองดังนี้: if (MyClass.TryParse(s, out var result)) { // use result here } เนื่องจากฉันป้อนสาขาเมื่อการดำเนินการสำเร็จผลลัพธ์ไม่ควรเป็นโมฆะในสาขานั้น แต่เนื่องจากฉันทำเครื่องหมายว่าเป็นโมฆะฉันจึงต้องตรวจสอบสิ่งนั้นหรือใช้!เพื่อแทนที่: if (MyClass.TryParse(s, out …
22 c#  .net  null 

4
จำเป็นต้องใช้คอลัมน์ ID ที่ไม่ซ้ำกันในตารางหลายต่อหลาย (ทางแยก) หรือไม่
การเริ่มโครงการเล็ก ๆ กับ EF แต่ฉันมีคำถามบางอย่างเกี่ยวกับการเข้าร่วมตารางและกุญแจเป็นต้นให้บอกว่าฉันมีตารางแอปพลิเคชันและตารางสิทธิ์ แอปพลิเคชันมีสิทธิ์มากมายและสิทธิ์แต่ละรายการสามารถเป็นของแอปพลิเคชันจำนวนมาก (หลายต่อหลายคน) ตอนนี้ตารางใบสมัครและสิทธิ์เป็นเรื่องง่าย: Applications -------------- PK ApplicationID Name Permissions -------------- PK PermissionID Name แต่วิธีที่ดีที่สุดที่จะทำตารางเข้าร่วมคืออะไร? ฉันมีสองตัวเลือกเหล่านี้: ApplicationPermissions ----------------------- PK ApplicationPermissionID CU ApplicationID CU PermissionID หรือ ApplicationPermissions ----------------------- CPK ApplicationID CPK PermissionID PK = Primary Key CPK = Composite Primary Key CU = Composite Unique Index คุณเคยถูกเผาไปทางอื่นหรือไม่? …

7
แนวทางปฏิบัติที่ดีที่สุดสำหรับการบันทึกการทำงานของผู้ใช้ในการผลิต
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันวางแผนที่จะบันทึกสิ่งต่าง ๆ มากมายในสภาพแวดล้อมการผลิตของฉันสิ่งต่าง ๆ เช่นเมื่อผู้ใช้: เข้าสู่ระบบออกจากระบบ เปลี่ยนโปรไฟล์ แก้ไขการตั้งค่าบัญชี เปลี่ยนรหัสผ่าน ... ฯลฯ นี่เป็นวิธีปฏิบัติที่ดีที่จะทำกับสภาพแวดล้อมการผลิตหรือไม่? ยังเป็นวิธีที่ดีในการเข้าสู่ระบบทั้งหมดนี้คืออะไร ฉันกำลังใช้บล็อครหัสต่อไปนี้เพื่อเข้าสู่ระบบ: public void LogMessageToFile(string msg) { System.IO.StreamWriter sw = System.IO.File.AppendText( GetTempPath() + @"MyLogFile.txt"); try { string logLine = System.String.Format( "{0:G}: {1}.", System.DateTime.Now, msg); sw.WriteLine(logLine); } finally …
22 c#  asp.net  logging 

3
เมื่อใดควรคลาสหรือโมดูลในแอสเซมบลี / DLL แยกต่างหาก
มีแนวทางใดบ้างในการตัดสินใจว่าคลาสควรอยู่ในชุด / DLL ของตัวเองหรือไม่? ฉันมักจะเห็นโรงเรียนแห่งความคิดสองแห่ง: 1) "การจัดกลุ่ม" ของคลาสทุกคลาสนั้นอยู่ใน DLL ของตัวเองเช่นที่เก็บบริการ DTO โครงสร้างพื้นฐานเป็นต้น 2) ทุกอย่างควรอยู่ใน DLL เดียว แต่แยกออกจาก namespaces / folder เช่นมี "Core" DLL ที่มี namespaces เพิ่มเติมเช่น Core.Repositories, Core.Services, Core.DTO เป็นต้น ที่ทำงานเราเพิ่งรวบรวมทุกอย่างในสภาเดียวที่เรียกว่า "ธุรกิจ" มีบางโฟลเดอร์ แต่ไม่มีการแยกที่แท้จริง - วัตถุทางธุรกิจ (ด้วยตรรกะซึ่งบางอันไม่ควรเป็นคลาส) จะถูกรวมเข้าในโฟลเดอร์ "BusinessObjects" โดยไม่สนใจ สิ่งที่ใช้ในคลาสมากกว่าหนึ่งอยู่ในโฟลเดอร์ "Core" ยูทิลิตี้อยู่ในโฟลเดอร์ "ยูทิลิตี้" โครงสร้างพื้นฐานการเข้าถึงข้อมูลคือโฟลเดอร์ "ข้อมูล" - คุณจะได้รับแนวคิด สำหรับโมดูลใหม่ที่ฉันกำลังทำงานอยู่ฉันต้องการ / …

3
อะไรคือจุดประสงค์ของการอ้างอิงตนเองอย่างชัดเจนใน C #?
ฉันกำลังประเมิน CMS โอเพนซอร์สที่ชื่อว่า Piranha ( http://piranhacms.org/ ) เพื่อใช้ในโครงการใดโครงการหนึ่งของฉัน ฉันพบรหัสต่อไปนี้น่าสนใจและสับสนเล็กน้อยอย่างน้อยสำหรับฉัน บางอย่างช่วยให้ฉันเข้าใจได้หรือไม่ว่าทำไมห้องเรียนถึงได้รับมรดกจากประเภทเดียวกัน? public abstract class BasePage<T> : Page<T> where T : BasePage<T> { /// <summary> /// Gets/sets the page heading. /// </summary> [Region(SortOrder = 0)] public Regions.PageHeading Heading { get; set; } } ถ้าชั้นBasePage<T>จะถูกกำหนดไว้ทำไมสืบทอดมาจากPage<T> where T: BasePage<T>? มีจุดประสงค์เฉพาะอะไรบ้าง
21 c#  architecture  .net  cms 

4
ใช้คลาสนามธรรมใน C # เป็นคำจำกัดความ
ในฐานะนักพัฒนา C ++ ฉันค่อนข้างคุ้นเคยกับไฟล์ส่วนหัว C ++ และพบว่ามีประโยชน์ในการมี "เอกสาร" ที่ถูกบังคับภายในโค้ด ฉันมักจะมีช่วงเวลาที่ไม่ดีเมื่อฉันต้องอ่านรหัส C # เพราะ: ฉันไม่มีแผนที่ทางจิตของชั้นเรียนที่ฉันทำงานด้วย สมมติว่าในฐานะวิศวกรซอฟต์แวร์ฉันกำลังออกแบบกรอบงานของโปรแกรม มันจะบ้าเกินกว่าที่จะนิยามว่าทุกคลาสเป็นคลาสที่ไม่มีการใช้งานแบบนามธรรมคล้ายกับสิ่งที่เราจะทำกับส่วนหัวของ C ++ และให้นักพัฒนาใช้มันได้หรือไม่ ฉันเดาว่าอาจมีสาเหตุบางอย่างที่ทำให้บางคนคิดว่านี่เป็นทางออกที่น่ากลัว แต่ฉันไม่แน่ใจ สิ่งใดที่เราจะต้องพิจารณาเพื่อหาทางแก้ปัญหาเช่นนี้?

4
วิธีที่ดีที่สุดในการเขียนวิธี“ ลอง” ใน C # 7 คืออะไร
ฉันกำลังเขียนการใช้ Queue ประเภทที่มีTryDequeueวิธีการที่ใช้รูปแบบคล้ายกับTryParseวิธีการ. NET ต่าง ๆซึ่งฉันส่งคืนค่าบูลีนหากการดำเนินการสำเร็จและใช้outพารามิเตอร์เพื่อส่งคืนค่าที่ถูกตัดจริง public bool TryDequeue(out Message message) => _innerQueue.TryDequeue(out message); ตอนนี้ฉันชอบหลีกเลี่ยงoutparams ทุกครั้งที่ทำได้ C # 7 ทำให้เรามีตัวแปรต่าง ๆ เพื่อให้การทำงานกับมันง่ายขึ้น แต่ฉันยังคงพิจารณาถึงความชั่วร้ายที่จำเป็นมากกว่าเครื่องมือที่มีประโยชน์ พฤติกรรมที่ฉันต้องการจากวิธีนี้มีดังนี้: หากมีรายการที่จะ dequeue คืนมัน หากไม่มีรายการที่จะถอน (คิวว่างเปล่าให้ผู้โทรมีข้อมูลเพียงพอที่จะดำเนินการอย่างเหมาะสม อย่าเพิ่งส่งคืนรายการที่ไม่มีค่าหากไม่มีรายการที่เหลืออยู่ อย่าโยนข้อยกเว้นหากพยายาม dequeue จากคิวที่ว่างเปล่า ตอนนี้ผู้เรียกใช้เมธอดนี้มักจะใช้รูปแบบดังต่อไปนี้ (โดยใช้ไวยากรณ์ตัวแปร C # 7 out): if (myMessageQueue.TryDequeue(out Message dequeued)) MyMessagingClass.SendMessage(dequeued) else Console.WriteLine("No messages!"); // do other …
21 c# 

1
Go ปรับปรุงประสิทธิภาพการทำงานด้วยอินเทอร์เฟซ“ นัย” อย่างไรและเปรียบเทียบกับแนวคิดของ C # ของวิธีการขยายอย่างไร
ในการสอนภาษาไปพวกเขาอธิบายว่าอินเตอร์เฟสทำงานอย่างไร: Go ไม่มีคลาส อย่างไรก็ตามคุณสามารถกำหนดวิธีการกับประเภทโครงสร้าง รับวิธีการที่ปรากฏในรายการอาร์กิวเมนต์ของตัวเองระหว่างคำหลัก func และชื่อวิธีการ type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } ประเภทอินเตอร์เฟสถูกกำหนดโดยชุดวิธีการ ค่าประเภทอินเตอร์เฟสสามารถเก็บค่าใดก็ได้ที่ใช้วิธีการเหล่านั้น นี่เป็นวิธีเดียวในการสร้างส่วนต่อประสานใน Go Google อธิบายเพิ่มเติมว่า: ชนิดที่ใช้อินเทอร์เฟซโดยใช้วิธีการ ไม่มีการประกาศเจตนาอย่างชัดเจน [ interfaceการประกาศเช่น] อินเทอร์เฟซโดยนัย decouple ใช้งานแพคเกจจากแพคเกจที่กำหนดอินเทอร์เฟซ: ไม่ขึ้นอยู่กับอีก นอกจากนี้ยังสนับสนุนการกำหนดอินเทอร์เฟซที่แม่นยำเนื่องจากคุณไม่จำเป็นต้องค้นหาทุกการติดตั้งและติดแท็กด้วยชื่ออินเตอร์เฟสใหม่ ทั้งหมดนี้ฟังดูน่าสงสัยเช่นวิธีการขยายใน C #ยกเว้นวิธีการใน Go ที่เป็น polymorphic โหดเหี้ยม พวกเขาจะทำงานในประเภทใด ๆที่ใช้พวกเขา …
21 c#  language-design  go 

3
การทดสอบหน่วยเปราะเนื่องจากต้องการการเยาะเย้ยมากเกินไป
ฉันดิ้นรนกับปัญหาที่น่ารำคาญมากขึ้นเกี่ยวกับการทดสอบหน่วยของเราที่เรากำลังนำไปใช้ในทีมของฉัน เรากำลังพยายามเพิ่มการทดสอบหน่วยในรหัสดั้งเดิมที่ไม่ได้ออกแบบมาอย่างดีและในขณะที่เราไม่ได้มีปัญหาใด ๆ กับการเพิ่มการทดสอบจริง ๆ เราเริ่มที่จะต่อสู้กับการทดสอบที่เกิดขึ้น เป็นตัวอย่างของปัญหาสมมติว่าคุณมีวิธีการที่เรียก 5 วิธีอื่น ๆ เป็นส่วนหนึ่งของการดำเนินการ การทดสอบสำหรับวิธีนี้อาจเป็นการยืนยันว่าลักษณะการทำงานที่เกิดขึ้นเป็นผลมาจากวิธีการหนึ่งใน 5 วิธีการอื่นที่เรียกว่า ดังนั้นเนื่องจากการทดสอบหน่วยควรล้มเหลวด้วยเหตุผลเดียวและเหตุผลเดียวเท่านั้นคุณต้องการกำจัดปัญหาที่อาจเกิดขึ้นจากการเรียก 4 วิธีการอื่น ๆ เหล่านี้และเยาะเย้ยพวกเขาออก ที่ดี! การทดสอบหน่วยดำเนินการวิธีการเยาะเย้ยจะถูกละเว้น (และพฤติกรรมของพวกเขาสามารถยืนยันได้ว่าเป็นส่วนหนึ่งของการทดสอบหน่วยอื่น ๆ ) และการตรวจสอบใช้งานได้ แต่มีปัญหาใหม่ - การทดสอบหน่วยมีความรู้อย่างใกล้ชิดว่าคุณยืนยันพฤติกรรมและการเปลี่ยนแปลงลายเซ็นใด ๆ ของ 4 วิธีอื่น ๆ ในอนาคตหรือวิธีการใหม่ใด ๆ ที่จำเป็นต้องเพิ่มใน 'วิธีการหลัก' จะ ส่งผลให้ต้องเปลี่ยนการทดสอบหน่วยเพื่อหลีกเลี่ยงความล้มเหลวที่เป็นไปได้ โดยธรรมชาติแล้วปัญหาสามารถลดลงได้บ้างเพียงแค่มีวิธีการมากขึ้นที่จะทำให้พฤติกรรมน้อยลง แต่ฉันหวังว่าอาจจะมีวิธีการแก้ปัญหาที่หรูหรากว่านี้ นี่คือตัวอย่างการทดสอบหน่วยที่จับปัญหา ในฐานะที่เป็นโน้ตย่อ 'MergeTests' เป็นคลาสการทดสอบหน่วยที่สืบทอดจากคลาสที่เรากำลังทดสอบและแทนที่พฤติกรรมตามต้องการ นี่คือ 'รูปแบบ' ที่เราใช้ในการทดสอบของเราเพื่อให้เราสามารถแทนที่การโทรไปยังคลาส / การอ้างอิงภายนอก …

5
อะไรคือการใช้งานจริงของโมดิฟายเออร์“ ใหม่” ใน C # เกี่ยวกับการซ่อน?
เพื่อนร่วมงานและฉันกำลังดูพฤติกรรมของnewคำหลักใน C # ตามที่ใช้กับแนวคิดของการซ่อน จากเอกสาร : ใช้โมดิฟายเออร์ใหม่เพื่อซ่อนสมาชิกที่สืบทอดจากคลาสพื้นฐานอย่างชัดเจน ในการซ่อนสมาชิกที่สืบทอดให้ประกาศในคลาสที่ได้รับโดยใช้ชื่อเดียวกันและแก้ไขด้วยตัวดัดแปลงใหม่ เราได้อ่านเอกสารแล้วและเราเข้าใจว่ามันใช้ทำอะไรและทำอย่างไร สิ่งที่เราไม่สามารถจัดการได้จริงๆคือทำไมคุณต้องทำตั้งแต่แรก โมดิฟายเออร์มีมาตั้งแต่ปี 2003 และเราทั้งคู่ทำงานกับ. Net มานานกว่านั้นและไม่เคยเกิดขึ้นมาก่อน พฤติกรรมนี้จำเป็นต้องใช้ในทางปฏิบัติเมื่อใด (เช่น: นำไปใช้กับกรณีธุรกิจ) นี่เป็นคุณสมบัติที่ใช้งานได้นานกว่าประโยชน์หรือเป็นสิ่งที่ผิดปกติมากพอในสิ่งที่เราทำ (โดยเฉพาะเราทำเว็บฟอร์มและแอปพลิเคชั่น MVC และ WinForms และ WPF) ในการลองใช้คำหลักนี้และเล่นกับมันเราพบว่ามีพฤติกรรมบางอย่างที่ทำให้มันดูอันตรายเล็กน้อยหากใช้ผิดวัตถุประสงค์ สิ่งนี้ฟังดูเปิดกว้างเล็กน้อย แต่เรากำลังมองหากรณีการใช้งานเฉพาะที่สามารถนำไปใช้กับแอปพลิเคชันธุรกิจที่พบว่าเครื่องมือนี้มีประโยชน์โดยเฉพาะ
21 c#  keywords 

5
ข้อมูลจะถูกส่งผ่านระหว่าง Javascript ฝั่งไคลเอ็นต์และรหัส C # หลังแอพ ASP.NET ได้อย่างไร
ฉันกำลังมองหาวิธีที่มีประสิทธิภาพ / มาตรฐานในการส่งผ่านข้อมูลระหว่างรหัส JavaScript ฝั่งไคลเอ็นต์และรหัส C # หลังแอปพลิเคชัน ASP.NET ฉันใช้วิธีการดังต่อไปนี้เพื่อให้บรรลุสิ่งนี้ แต่พวกเขาทั้งหมดรู้สึกว่าเหลวไหล ในการส่งข้อมูลจาก JavaScript ไปยังรหัส C # คือการตั้งค่าตัวแปร ASP ที่ซ่อนอยู่และเรียกใช้ postback: <asp:HiddenField ID="RandomList" runat="server" /> function SetDataField(data) { document.getElementById('<%=RandomList.ClientID%>').value = data; } จากนั้นในรหัส C # ฉันรวบรวมรายการ: protected void GetData(object sender, EventArgs e) { var _list = RandomList.value; } กลับไปทางอื่นฉันมักจะใช้ ScriptManager เพื่อลงทะเบียนฟังก์ชั่นและส่งผ่านข้อมูลระหว่าง …

7
บททดสอบการเขียนโปรแกรมภาษา C # ที่น่ากลัว - คำแนะนำใด ๆ ? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันมีงาน C # dev ที่เป็นไปได้ แต่ก่อนที่ฉันจะสัมภาษณ์ฉันต้องผ่านการทดสอบกับ บริษัท จัดหางาน แม้ว่าฉันจะเป็นนักพัฒนาอาวุโสที่มีประสบการณ์การเขียนโปรแกรมมากกว่า 10 ปีและมากกว่า 3 ปีกับ c # ฉันไม่ได้รอการทดสอบนี้และฉันคิดว่ามีโอกาสที่ดีที่ฉันจะล้มเหลว จากประสบการณ์ของฉันการทดสอบเหล่านี้ไม่สามารถคาดเดาได้ว่าจะถามคุณถึงสิ่งที่คุณไม่ค่อยได้ใช้ในสถานการณ์การทำงานประจำวัน ฉันต้องการคำแนะนำที่ดีที่สุดของคุณเกี่ยวกับสิ่งที่ฉันควรจะแก้ไขใน - ตัวอย่างเช่นหนังสือหรือเว็บไซต์ที่ดี ฉันมีเวลาน้อยกว่า 1 สัปดาห์ในการเตรียมตัวและมันเป็นสิ่งสำคัญที่ฉันต้องผ่านสิ่งนี้ ขอบคุณล่วงหน้า. แก้ไข: เพื่อพิสูจน์ความกังวลของฉันเพิ่มเติมจากการเขียนการทดสอบดังกล่าว - พิจารณาคำถามต่อไปนี้: 12) เหตุการณ์คือ: a) The result of a users action - correct …
21 c#  interview 

5
การใช้คลาสสแตติกเป็นเนมสเปซ
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันเห็นผู้พัฒนารายอื่นใช้คลาสคงที่เป็นเนมสเปซ public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() …

9
จะวางตรรกะทางธุรกิจไว้ใน Stored Procedure หรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา มีการถกเถียงกันในหัวข้อนี้เสมอ - "ไม่ว่าจะวางตรรกะทางธุรกิจในกระบวนงานที่เก็บไว้หรือไม่ หากเราตัดสินใจที่จะไม่ใช้เครื่องมือ ORM และไม่ใส่ Business Logic ใน Stored Procedure เราจะวาง Business Logic ไว้ที่ไหน? ในแอปพลิเคชันก่อนหน้าของฉันฉันมักจะต้องการวาง Business Logic ทั้งหมดในขั้นตอนการจัดเก็บเท่านั้น จากนั้นในรหัส. NET ฉันเรียกขั้นตอนการจัดเก็บเหล่านี้โดยใช้ Data Application Application Blocks SQLHelper เป็นต้น แต่นี่ไม่สามารถเป็นสถานการณ์ได้ตลอดเวลา ดังนั้นฉันจึงทำ googling แต่ก็สับสนในที่สุด ....... ข้อเสนอแนะใด ๆ ... ?
21 c#  .net  sql 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.