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

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

5
วิธีการสร้างแบบจำลองการอ้างอิงแบบวงกลมระหว่างวัตถุที่ไม่เปลี่ยนรูปใน C #?
ในตัวอย่างโค้ดต่อไปนี้เรามีคลาสสำหรับวัตถุที่ไม่เปลี่ยนรูปซึ่งแสดงถึงห้อง ทิศเหนือทิศใต้ทิศตะวันออกและทิศตะวันตกเป็นตัวแทนออกไปสู่ห้องอื่น public sealed class Room { public Room(string name, Room northExit, Room southExit, Room eastExit, Room westExit) { this.Name = name; this.North = northExit; this.South = southExit; this.East = eastExit; this.West = westExit; } public string Name { get; } public Room North { get; } public Room South …

3
ฉันจะวินิจฉัย async / รอคอยการหยุดชะงักได้อย่างไร
ฉันกำลังทำงานกับ codebase ใหม่ที่ใช้ async / await อย่างหนัก คนส่วนใหญ่ในทีมของฉันก็ค่อนข้างใหม่สำหรับ async / คอย โดยทั่วไปเรามักจะยึดถือแนวทางปฏิบัติที่ดีที่สุดตามที่ระบุไว้โดย Microsoftแต่โดยทั่วไปต้องการบริบทของเราที่จะไหลผ่านการเรียกใช้ async และทำงานกับไลบรารีที่ไม่ConfigureAwait(false)ต้องการ รวมทุกสิ่งเหล่านั้นเข้าด้วยกันและเราพบ aslock deadlock ที่อธิบายไว้ในบทความ ... ทุกสัปดาห์ พวกเขาจะไม่ปรากฏขึ้นในระหว่างการทดสอบหน่วยเพราะแหล่งข้อมูลของเราเยาะเย้ย (มักจะผ่านTask.FromResult) ไม่เพียงพอที่จะเรียกการหยุดชะงัก ดังนั้นในระหว่างการทดสอบรันไทม์หรือการรวมการบริการบางอย่างเพิ่งออกไปทานอาหารกลางวันและไม่ส่งคืน นั่นจะฆ่าเซิร์ฟเวอร์และโดยทั่วไปก็ทำสิ่งต่าง ๆ เป็นระเบียบ ปัญหาคือการติดตามจุดที่เกิดข้อผิดพลาด (โดยปกติแล้วจะไม่เป็นแบบซิงค์ตลอดเวลา) โดยทั่วไปแล้วจะเกี่ยวข้องกับการตรวจสอบรหัสด้วยตนเองซึ่งใช้เวลานานและไม่สามารถใช้งานได้โดยอัตโนมัติ วิธีที่ดีกว่าในการวินิจฉัยสิ่งที่ทำให้เกิดการหยุดชะงักคืออะไร
24 c#  debugging  async 

5
กรณีใดบ้างที่ประเภทข้อมูล 'uint' และ 'short' เหมาะสมกว่ามาตรฐาน int (32)
ฉันเข้าใจความแตกต่างของความสามารถและคุณค่าที่พวกเขาสามารถนำเสนอได้ แต่ดูเหมือนว่าผู้คนมักจะใช้Int32โดยไม่คำนึงว่าเหมาะสมหรือไม่ ดูเหมือนว่าจะไม่มีใครเคยใช้รุ่นที่ไม่ได้ลงชื่อ ( uint) แม้ว่าจะใช้เวลานานกว่าจะเหมาะกว่าเพราะอธิบายค่าที่ไม่สามารถลบได้ (อาจเป็นตัวแทนของ ID ของบันทึกฐานข้อมูล) นอกจากนี้ดูเหมือนว่าจะไม่มีใครใช้short/Int16โดยไม่คำนึงถึงความจุที่ต้องการของค่า อย่างมีเหตุผลมีกรณีที่จะดีกว่าที่จะใช้uintหรือไม่short/Int16และถ้าเป็นเช่นนั้น?
24 c# 

5
การใช้ตัวดำเนินการแคสต์อย่างชัดเจนของฉันนั้นสมเหตุสมผลหรือแฮ็คที่ไม่ดี?
ฉันมีวัตถุขนาดใหญ่: class BigObject{ public int Id {get;set;} public string FieldA {get;set;} // ... public string FieldZ {get;set;} } และวัตถุที่เหมือน DTO เฉพาะด้าน: class SmallObject{ public int Id {get;set;} public EnumType Type {get;set;} public string FieldC {get;set;} public string FieldN {get;set;} } ฉันพบแนวคิดส่วนตัวในการส่ง BigObject ไปยัง SmallObject อย่างชัดเจนโดยรู้ว่าเป็นการดำเนินการทางเดียวที่ทำให้ข้อมูลสูญหาย - ใช้งานง่ายและอ่านได้ง่ายมาก: var small = …

6
ทำไมจึงไม่ใช้จาวาเป็นภาษาสำหรับสร้าง?
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ หาก Java เป็นภาษาที่ใช้โดยทั่วไปและการสร้างโปรแกรมเป็นสิ่งที่สามารถอธิบายได้โดยใช้ภาษา Java ทำไมจึงไม่ใช่วิธีที่ดีที่สุดในการเขียนไฟล์บิลด์และเราใช้เครื่องมือเช่น Ant, Maven และ Gradle แทน มันจะไม่ตรงไปตรงมามากกว่านี้และยังไม่จำเป็นต้องเรียนรู้ภาษาการเขียนโปรแกรมอีกด้วย (BTW - คำถามนี้สามารถใช้ได้กับภาษาอื่นเช่น C #)
24 java  c#  builds  build-system 

5
วิธีที่ดีที่สุดในการโหลดการตั้งค่าแอปพลิเคชัน
วิธีง่าย ๆ ในการรักษาการตั้งค่าของแอปพลิเคชัน Java จะถูกแสดงด้วยไฟล์ข้อความที่มีนามสกุล ".properties" ที่มีตัวระบุของแต่ละการตั้งค่าที่เกี่ยวข้องกับค่าเฉพาะ (ค่านี้อาจเป็นตัวเลขสตริงวันที่ ฯลฯ ) . C # ใช้วิธีการที่คล้ายกัน แต่ไฟล์ข้อความจะต้องมีชื่อว่า "App.config" ในทั้งสองกรณีในซอร์สโค้ดคุณต้องเริ่มต้นคลาสเฉพาะสำหรับการอ่านการตั้งค่า: คลาสนี้มีวิธีการส่งคืนค่า (เป็นสตริง) ที่เกี่ยวข้องกับตัวระบุการตั้งค่าที่ระบุ // Java example Properties config = new Properties(); config.load(...); String valueStr = config.getProperty("listening-port"); // ... // C# example NameValueCollection setting = ConfigurationManager.AppSettings; string valueStr = setting["listening-port"]; // ... ในทั้งสองกรณีเราควรแยกสตริงที่โหลดจากไฟล์การกำหนดค่าและกำหนดค่าที่แปลงให้กับวัตถุที่พิมพ์ที่เกี่ยวข้อง (ข้อผิดพลาดในการแยกวิเคราะห์อาจเกิดขึ้นในช่วงนี้) …

8
เป็นเรื่องปกติหรือไม่ที่จะใช้คลาสบางส่วนเพื่อให้ได้ 'แบบแยกส่วนย่อย'?
ฉันเพิ่งพบสถานการณ์ใน codebase ของเราที่ทีมอื่นสร้าง 'god class' ที่มีประมาณ 800 วิธีแบ่งเป็น 135 ไฟล์เป็นคลาสบางส่วน ฉันถามทีมอื่นเกี่ยวกับเรื่องนี้ ในขณะที่ปฏิกิริยาทางเดินอาหารของฉันคือการทำให้มันออกมาจากวงโคจรพวกเขายืนยันว่ามันเป็นการออกแบบที่ดีการใช้งานทั่วไปและมันส่งเสริม 'modularity' และ 'ความง่ายในการใช้งาน' เพราะนักพัฒนาใหม่สามารถใส่กลอนในการทำงานได้ ของระบบ นี่เป็นเรื่องธรรมดาหรือเป็นความคิดที่ดีหรือไม่? ฉันอยากจะทำตามขั้นตอนทันทีเพื่อทำให้สัตว์ร้ายนี้ (หรืออย่างน้อยก็ป้องกันไม่ให้มันเติบโตต่อไป) แต่ฉันก็เต็มใจที่จะเชื่อว่าฉันผิด
24 c#  .net 

9
การเพิ่มความซับซ้อนในการลบรหัสที่ซ้ำกัน
ฉันมีหลายคลาสที่สืบทอดมาจากคลาสพื้นฐานทั่วไป Tชั้นฐานมีการเก็บรวบรวมวัตถุหลายของชนิด แต่ละคลาสเด็กต้องสามารถคำนวณค่าที่สอดแทรกจากการรวบรวมวัตถุ แต่เนื่องจากคลาสย่อยใช้ชนิดที่แตกต่างกันการคำนวณจึงแตกต่างกันเล็กน้อยจากคลาสหนึ่งไปอีกชั้น จนถึงตอนนี้ฉันได้คัดลอก / วางรหัสของฉันจากชั้นหนึ่งไปอีกชั้นหนึ่งและทำการแก้ไขเล็กน้อยกับแต่ละรายการ แต่ตอนนี้ฉันกำลังพยายามลบรหัสที่ซ้ำกันและแทนที่ด้วยวิธีการแก้ไขทั่วไปในคลาสพื้นฐานของฉัน อย่างไรก็ตามนั่นเป็นการพิสูจน์ว่าเป็นเรื่องยากมากและวิธีแก้ปัญหาทั้งหมดที่ฉันคิดว่าดูเหมือนซับซ้อนเกินไป ฉันเริ่มคิดว่าหลักการ DRY ไม่ได้นำไปใช้มากในสถานการณ์แบบนี้ แต่ฟังดูเหมือนเป็นการดูหมิ่น ความซับซ้อนเท่าไหร่เมื่อพยายามลบการทำสำเนารหัสมากเกินไป? แก้ไข: ทางออกที่ดีที่สุดที่ฉันสามารถทำได้คือ: ชั้นฐาน: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return …

9
C ++ สำหรับนักพัฒนา C #
ฉันรู้ว่า C # ค่อนข้างดี (เรียนรู้ด้วยตนเองเศร้า) และจำเป็นต้องเขียนโปรแกรม C ++ บางอย่างสำหรับแอปพลิเคชัน Windows ฉันสามารถค้นหาข้อมูลมากมายสำหรับนักพัฒนา C ++ ที่เรียนรู้ C # แต่ไม่สามารถเรียนรู้ C ++ ได้มากนักเมื่อคุณรู้จัก C # แล้ว มีใครบ้างที่รู้พื้นฐานที่ดีบ้างไหม? MSDN มีการเปรียบเทียบแต่ไม่ลึกมาก ฉันสามารถแยกแหล่งที่มาหลายแห่งด้วยกัน แต่คิดว่ามีบางอย่างอยู่ข้างนอก - ฉันแค่หามันไม่เจอ ขอบคุณสำหรับความช่วยเหลือของคุณ.
24 c#  c++ 

2
เมื่อใดจึงเหมาะสมที่จะใช้สมาชิกที่มีการแสดงออก [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว C # 6 แนะนำสมาชิกที่มีการแสดงออกซึ่งช่วยให้โค้ดง่ายขึ้นในวิธีการและคุณสมบัติที่ส่งกลับผลลัพธ์ของการแสดงออกเท่านั้น: public override string ToString() { return string.Format("{0} {1}", _field1, _field2); } กลายเป็น: public override string ToString() => string.Format("{0} {1}", _field1, _field2); เนื่องจากขณะนี้เรามีไวยากรณ์ที่เทียบเท่าและถูกต้องสองกฎจึงต้องใช้กฎบางข้อเพื่อตัดสินใจว่าจะใช้แบบไหน ทางเลือกใหม่เหมาะสมเมื่อใด
24 c# 

4
async + await == ซิงค์หรือไม่
สะดุดกับโพสต์นี้ที่พูดถึงเกี่ยวกับการทำคำขอเว็บ async ตอนนี้ความเรียบง่ายกันถ้าในโลกแห่งความจริงสิ่งที่คุณต้องทำคือการขอ async และรอให้มันอยู่ในบรรทัดถัดไปนั่นไม่เหมือนกับการโทรแบบซิงค์ในตอนแรกใช่ไหม

3
ใน C # เหตุใดจึงมีการประกาศตัวแปรภายในบล็อกลองในขอบเขต
ฉันต้องการเพิ่มข้อผิดพลาดในการจัดการ: var firstVariable = 1; var secondVariable = firstVariable; ด้านล่างจะไม่รวบรวม: try { var firstVariable = 1; } catch {} try { var secondVariable = firstVariable; } catch {} เหตุใดจึงจำเป็นสำหรับ try catch block ที่จะส่งผลต่อขอบเขตของตัวแปรเช่นเดียวกับบล็อคโค้ดอื่น ๆ เห็นแก่ความสอดคล้องกันมันจะสมเหตุสมผลหรือไม่ที่เราจะสามารถห่อโค้ดของเราด้วยการจัดการข้อผิดพลาดโดยไม่จำเป็นต้อง refactor

6
มันเป็นไรไหมที่ชั้นเรียนจะใช้วิธีสาธารณะของตัวเอง?
พื้นหลัง ขณะนี้ฉันมีสถานการณ์ที่มีวัตถุที่ส่งและรับจากอุปกรณ์ ข้อความนี้มีโครงสร้างหลายอย่างดังนี้: public void ReverseData() public void ScheduleTransmission() ScheduleTransmissionวิธีการตอบสนองความต้องการที่จะเรียกReverseDataวิธีการเมื่อใดก็ตามที่มันถูกเรียกว่า อย่างไรก็ตามมีบางครั้งที่ฉันจะต้องโทรหาReverseDataภายนอก (และฉันควรเพิ่มนอกเนมสเปซทั้งหมด ) จากที่วัตถุถูกสร้างอินสแตนซ์ในแอปพลิเคชัน สำหรับ "รับ" ฉันหมายถึงว่าReverseDataจะถูกเรียกจากภายนอกในobject_receivedตัวจัดการเหตุการณ์เพื่อยกเลิกการย้อนกลับข้อมูล คำถาม โดยทั่วไปจะยอมรับวัตถุที่เรียกวิธีการสาธารณะของตนเองหรือไม่?

1
เหตุใดอาร์เรย์ใน. Net จึงมีความยาว แต่คอลเลกชันประเภทอื่นมีจำนวนถึง [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ใน C # ตัวอย่างอาร์เรย์มีคุณสมบัติความยาว แต่คอลเล็กชันประเภทอื่น ๆ เช่นรายการ ฯลฯ มีคุณสมบัติ Count มีเหตุผลทำไมทั้งสองนี้แตกต่างกันอย่างไร ถ้าฉันอยากรู้

6
ใน TDD ฉันต้องเขียน Test ก่อนหรือ Interface ก่อน?
ฉันกำลังเรียนรู้ TDD โดยใช้ c # เท่าที่ฉันรู้ว่าการทดสอบควรผลักดันการพัฒนานั่นคือการเขียนการทดสอบที่ล้มเหลวครั้งแรกหลังจากที่เขียนรหัสขั้นต่ำที่เปลือยเปล่าเพื่อผ่านการทดสอบแล้วทำการทดสอบใหม่ แต่มันก็ยังกล่าวว่า " โปรแกรมเพื่อการเชื่อมต่อที่ไม่ได้ดำเนินการ " เพื่อเขียนอินเตอร์เฟซแรก นี่คือสิ่งที่ความสับสนของฉันเริ่มต้นขึ้นถ้าฉันกำลังเขียนส่วนต่อประสานกันก่อนสิ่งนั้นจะเป็นการละเมิดสองสิ่ง รหัสที่ถูกเขียนขึ้นสำหรับอินเตอร์เฟซจะไม่ได้แรงหนุนจากการทดสอบ มันไม่ได้เป็นขั้นต่ำเปล่าแน่นอนฉันสามารถเขียนด้วยชั้นเรียนที่เรียบง่าย ฉันควรเริ่มด้วยการเขียนการทดสอบสำหรับอินเทอร์เฟซด้วยหรือไม่ ฉันจะทำการทดสอบโดยไม่ใช้อะไร หากคำถามนี้ฟังดูน่าเสียใจสำหรับเรื่องนั้น แต่ฉันสับสนอย่างที่สุด อาจเป็นเพราะฉันกำลังทำสิ่งต่าง ๆ อย่างแท้จริงเช่นกัน
23 c#  unit-testing  tdd 

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