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

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

1
อะไรคือจุดประสงค์ของการวิเคราะห์รหัสและเมื่อใดที่ฉันต้องใช้มัน
ฉันได้ยินเกี่ยวกับการวิเคราะห์รหัสของ Visual Studio แต่ไม่เคยใช้ ฉันอ่านMSDNแล้ว แต่ก็ยังไม่เข้าใจถึงการใช้งานจริงของการวิเคราะห์รหัส ไม่เหมือนกับ StyleCop หรือ ที่ไหนสักแห่ง FxCop ก็พูดถึง การวิเคราะห์รหัสแตกต่างกันอย่างไร ฉันจำเป็นต้องใช้การวิเคราะห์รหัสสำหรับทุกโครงการหรือไม่ เพื่อนร่วมงานของฉันทำรีวิวรหัสไม่เพียงพอหรือไม่?

5
คุณต้องการให้สิ่งส่วนตัวภายใน / สาธารณะสำหรับการทดสอบหรือใช้การแฮ็คบางอย่างเช่น PrivateObject หรือไม่
ฉันค่อนข้างเริ่มต้นในการทดสอบโค้ดและเป็นassertโสเภณีก่อนหน้านี้ สิ่งหนึ่งที่ทำให้ฉันกังวลในการทดสอบหน่วยคือบ่อยครั้งที่คุณต้องสร้างฟิลด์public(หรืออย่างน้อยinternal) ที่จะเป็นprivateอย่างอื่นเพื่อยกเลิกการreadonlyสร้างprivateวิธีการprotected virtualแทน ฯลฯ ฉันเพิ่งค้นพบว่าคุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยใช้สิ่งต่าง ๆ เช่นคลาสPrivateObjectเพื่อทำเครื่องหมายสิ่งต่าง ๆ ในวัตถุผ่านการสะท้อนกลับ แต่สิ่งนี้ทำให้การทดสอบของคุณบำรุงรักษาได้น้อยลง (สิ่งต่าง ๆ จะล้มเหลวในการดำเนินการมากกว่าการรวบรวมเวลามันจะถูกทำลายโดยการเปลี่ยนชื่อแบบง่ายยากที่จะทำการดีบั๊ก ... ) คุณมีความคิดเห็นอย่างไรกับเรื่องนี้? แนวปฏิบัติที่ดีที่สุดในการทดสอบหน่วยเกี่ยวกับการ จำกัด การเข้าถึงคืออะไร แก้ไข: พิจารณาอินสแตนซ์ที่คุณมีคลาสที่มีแคชในไฟล์บนดิสก์และในการทดสอบของคุณคุณต้องการเขียนไปยังหน่วยความจำแทน
26 c#  unit-testing 

4
ทำไมทีมพัฒนายืนยันว่าการใช้โซลูชันเดียวสำหรับหลายโครงการใน Visual Studio“ เพิ่มความซับซ้อนในการพึ่งพาซึ่งกันและกัน”
ฉันช่วยจัดการทีมภายนอกที่เริ่มพัฒนาผลิตภัณฑ์ใหม่ที่มีอยู่บางรุ่น ในอดีตทีมนี้มักจะใช้รูปแบบของโครงการเดียวในโซลูชันเดียวสำหรับโมดูลประมาณ 30 โมดูลใน Visual Studio ซึ่งทำงานร่วมกันเพื่อสร้างโครงสร้างที่ปรับใช้ได้ สิ่งนี้มีผลกระทบที่เป็นอันตรายต่อการสร้างความน่าเชื่อถือและคุณภาพเนื่องจากพวกเขาไม่ได้ส่งซอร์สโค้ดที่ทันสมัยที่สุดมาให้เราเสมอ เราพยายามที่จะกดพวกเขาเพื่อรวมรหัสอ้างอิงทั้งหมดในโซลูชันเดียว แต่เราได้รับการต่อต้าน - โดยเฉพาะพวกเขาพูดคุยเกี่ยวกับการพึ่งพาซึ่งกันและกันระหว่างโมดูล (อ่าน "โครงการ" ใน Visual Studio) เพิ่มขึ้นหากทุกอย่างอยู่ใน ไฟล์โซลูชันเดียว ไม่มีการใช้รหัสใดในโซลูชันแยกต่างหากที่อื่น ฉันยืนยันว่านี่เป็นเรื่องไร้สาระและรูปแบบการพัฒนาที่ดีจะหลีกเลี่ยงปัญหาดังกล่าว ทีมที่มีปัญหายังดำเนินการแก้ไขข้อผิดพลาดและการพัฒนาคุณสมบัติใหม่ในผลิตภัณฑ์ที่มีอยู่ซึ่งประสบการณ์ที่ได้รับนั้นเต็มไปด้วยปัญหาที่พูดได้น้อยที่สุดและได้รับความทุกข์ทรมานจากปัญหาเดียวกัน เราถูกปฏิเสธการเข้าถึงแหล่งควบคุม ( TFS ) ของพวกเขาและวิธีการที่เราดำเนินการเพื่อรวมรหัสฐานคือการพยายามและลดจำนวนของการอัปเดตที่ขาดหายไปและอย่างน้อยก็ลดลงเป็นครั้งคราว (ใช่แล้ว - แนะนำให้รู้จักกับผลิตภัณฑ์) โดยการพูดว่า "ส่ง ZIP ของโฟลเดอร์โซลูชันทั้งหมดให้เราเพื่อให้เราสามารถคลายซิปเปิดใน Visual Studio และกดF5 สำหรับการทดสอบ "ในแง่ของโครงสร้างและคุณภาพทั่วไปรหัสนั้นค่อนข้างแย่และยากที่จะให้การสนับสนุนประสบการณ์นี้เป็นสาเหตุที่ฉันตั้งใจจะทำให้กระบวนการทำงานถูกต้องในช่วงต้นของการพัฒนาให้เร็วที่สุดเท่าที่จะทำได้ มีบางอย่างที่ฉันขาดหายไปหรือไม่? มีเหตุผลที่ดีที่จะแยกรหัสทั้งหมดออกไหม สำหรับเงินของฉันมันจะต้องมีเหตุผลที่น่าสนใจดังนั้นมันจึงเป็นความรู้ทั่วไป แต่ฉันก็เต็มใจที่จะยอมรับว่าฉันไม่รู้ทุกอย่าง

7
ระบุชื่อพารามิเตอร์ทางเลือกแม้ว่าจะไม่จำเป็นก็ตาม?
พิจารณาวิธีการต่อไปนี้: public List<Guid> ReturnEmployeeIds(bool includeManagement = false) { } และสายต่อไปนี้: var ids = ReturnEmployeeIds(true); สำหรับนักพัฒนาใหม่สำหรับระบบมันค่อนข้างยากที่จะคาดเดาสิ่งที่trueทำ สิ่งแรกที่คุณต้องทำคือวางเม้าส์เหนือชื่อเมธอดหรือไปที่คำจำกัดความ (ซึ่งไม่ได้เป็นงานใหญ่เลยแม้แต่น้อย) แต่เพื่อประโยชน์ในการอ่านมันทำให้รู้สึกถึงการเขียน: var ids = ReturnEmployeeIds(includeManagement: true); มีที่ไหนที่อย่างเป็นทางการกล่าวถึงว่าจะระบุพารามิเตอร์ทางเลือกอย่างชัดเจนหรือไม่เมื่อคอมไพเลอร์ไม่ต้องการให้คุณ? บทความต่อไปนี้กล่าวถึงข้อตกลงการเข้ารหัสบางอย่าง: https://msdn.microsoft.com/en-gb/library/ff926074.aspx สิ่งที่คล้ายกับบทความข้างต้นจะดีมาก

5
อินสแตนซ์อาจเท่ากับอินสแตนซ์อื่นที่เป็นประเภทเฉพาะเจาะจงมากกว่าหรือไม่
ฉันได้อ่านบทความนี้: วิธีการเขียนวิธีที่เท่าเทียมกันในชวา โดยพื้นฐานแล้วจะมีวิธีแก้ปัญหาสำหรับวิธีเท่ากับ () ที่รองรับการสืบทอด: Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true แต่มันเป็นความคิดที่ดี? อินสแตนซ์ทั้งสองนี้ดูเหมือนจะเท่ากัน แต่อาจมีรหัสแฮชที่แตกต่างกันสองแบบ ไม่ผิดหรอกเหรอ? ฉันเชื่อว่าสิ่งนี้จะสำเร็จได้ดีกว่าโดยการคัดเลือกตัวถูกดำเนินการแทน
25 java  c#  scala  comparison 

4
ฉันจะจัดการ setters ในฟิลด์ที่ไม่เปลี่ยนรูปแบบได้อย่างไร
ฉันมีชั้นเรียนสองreadonly intสาขา พวกเขาถูกเปิดเผยเป็นคุณสมบัติ: public class Thing { private readonly int _foo, _bar; /// <summary> I AM IMMUTABLE. </summary> public Thing(int foo, int bar) { _foo = foo; _bar = bar; } public int Foo { get { return _foo; } set { } } public int Bar { get { …

8
การรวบรวมลำดับของฉันควรเริ่มต้นที่ดัชนี 0 หรือดัชนี 1 หรือไม่
ฉันกำลังสร้างแบบจำลองวัตถุสำหรับอุปกรณ์ที่มีหลายช่องทาง คำนามที่ใช้ระหว่างลูกค้าและฉันและChannel ChannelSet("ชุด" ไม่ถูกต้องทางความหมายเพราะเป็นชุดและชุดที่ไม่ถูกต้อง แต่นั่นเป็นปัญหาสำหรับเวลาที่แตกต่างกัน) ฉันใช้ C # นี่คือตัวอย่างการใช้งานของChannelSet: // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 ทั้งหมดคือสำรวย อย่างไรก็ตามลูกค้าไม่ใช่โปรแกรมเมอร์และพวกเขาจะสับสนอย่างแน่นอนโดยไม่มีการทำดัชนี - ช่องแรกคือช่องที่ 1 สำหรับพวกเขา แต่เพื่อประโยชน์ของความสอดคล้องกับ C # ผมต้องการที่จะให้ChannelSetจัดทำดัชนีจากศูนย์ นี่เป็นสาเหตุที่ทำให้เกิดการเชื่อมต่อระหว่างทีม …

1
การเขียนโปรแกรมเครือข่าย Async โดยใช้ Reactive Extensions
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 5 ปีที่ผ่านมา หลังจากทำการsocketเขียนโปรแกรมasync "ระดับต่ำ" บางอย่าง (มากหรือน้อย) เมื่อหลายปีก่อน (ในรูปแบบเหตุการณ์แบบ Asynchronous Pattern (EAP) ) และเมื่อเร็ว ๆ นี้ได้ย้าย "up" เป็นรูปTcpListenerแบบการเขียนโปรแกรม Asynchronous (APM)แล้ว พยายามที่จะย้ายไปที่async/await(รูปแบบอะซิงโครนัสตามรูปแบบ(TAP) ) ฉันค่อนข้างจะมีมันด้วยต้องรำคาญกับ 'ประปาในระดับต่ำ' ทั้งหมดนี้ ดังนั้นฉันจึงหา; ทำไมไม่ยอมแพ้RX( ส่วนขยายรีแอคทีฟ ) เพราะมันอาจเข้ากับโดเมนปัญหาของฉันได้ รหัสจำนวนมากที่ฉันเขียนมีให้กับไคลเอนต์จำนวนมากที่เชื่อมต่อผ่าน Tcp ไปยังแอปพลิเคชันของฉันซึ่งจะเริ่มการสื่อสารแบบสองทาง (async) ลูกค้าหรือเซิร์ฟเวอร์อาจตัดสินใจว่าจะต้องส่งข้อความและทำเช่นนั้นดังนั้นนี่ไม่ใช่request/responseการตั้งค่าแบบดั้งเดิมของคุณแต่เป็นแบบเรียลไทม์แบบสองทาง "สาย" เปิดให้ทั้งสองฝ่ายส่งสิ่งที่พวกเขาต้องการ เมื่อใดก็ตามที่พวกเขาต้องการ (หากใครมีชื่อที่เหมาะสมในการอธิบายสิ่งนี้ฉันยินดีที่จะได้ยิน!) "โปรโตคอล" …
25 c#  .net  tcp 

3
เป็นเรื่องยากที่จะตั้งชื่อคุณสมบัติ / สมาชิกเหมือนกับประเภทประกาศใน C # หรือไม่?
ตัวอย่างเช่นคลาสที่ชอบ: class Dog { } //never mind that there's nothing in it... แล้วคุณสมบัติเช่น: Dog Dog { get; set; } ฉันได้รับแจ้งว่าถ้าฉันไม่สามารถสร้างชื่อที่จินตนาการได้มากกว่านี้ฉันต้องใช้: Dog DogObject { get; set; } มีความคิดเกี่ยวกับวิธีตั้งชื่อให้ดีกว่านี้อย่างไร?
25 c#  naming  properties 

6
วิธีแก้ไขโครงการที่ไม่มีโครงสร้างโดยทั่วไป
ฉันทำงานเกี่ยวกับโปรเจคซอฟต์แวร์เป็นส่วนใหญ่มานานกว่า 5 ปีแล้ว มันเป็นความยุ่งเหยิงที่จะเริ่มต้นด้วย (ฉันเป็นนักพัฒนาที่สามหรือสี่ที่จะทำงานกับมัน) และแม้ว่ามันจะเป็นระเบียบน้อยกว่าตอนนี้มันยังคงไม่เป็นระเบียบ อัตราความคืบหน้าในการควบคุมมันเป็นน้ำแข็งและฉันเริ่มรู้สึกท้อแท้กับสถานะที่มันเข้ามาฉันจะเริ่มแก้ไขได้อย่างไร ข้อมูลเฉพาะของโครงการ: เป็นโปรแกรมการขายที่เขียนขึ้นเกือบทั้งหมดใน Visual Basic Classic (VB6) ที่มีแบ็คเอนด์ MySQL และเครื่องมือการรายงานที่เขียนใน C # โมดูลการรายงาน C # นั้นมีความสุขที่ได้ทำงานมันเป็นเพียงการเขียนในช่วงสองสามปีที่ผ่านมาและก่อนหน้านั้นรายงานทั้งหมดได้ทำใน Crystal Reports 9 (ใช่เรายังมีรายงานบางส่วนที่ต้องใช้) อย่างไรก็ตามโปรแกรมจริงนั้นเป็นหายนะที่สมบูรณ์ มีทั้งหมด LOC ค่อนข้างไม่เกิน 90k และความคิดเห็นประมาณ 10k บรรทัด (ส่วนใหญ่ไม่ใช่เอกสาร แต่เป็นรหัสเก่าที่แสดงความคิดเห็น) 158 ไฟล์ฟอร์มและ 80 ไฟล์โมดูล ฉันไม่ทราบเลยว่ามีการใช้งานจริงกี่รายการเพราะคุณสมบัติบางอย่างของโปรแกรมนั้นถูกคัดค้านและ (เอ่อบางครั้ง) ตั้งข้อสังเกตเช่นนี้โดยไม่ต้องลบรหัสที่เกี่ยวข้องออกจากโปรแกรม ฉันเดาว่ารหัส 50% เท่านั้นที่ใช้งานได้จริง ฉันกลัวที่จะสัมผัสรหัสจำนวนมากเพียงเพราะฉันไม่แน่ใจว่าฉันทำลายสิ่งที่ลูกค้าที่ไม่ชัดเจนคนใดคนหนึ่งต้องพึ่งพามันเกิดขึ้นในหลายครั้งเกินกว่าที่ฉันจะนับได้ มันเหมือนกับว่ามีทุ่นระเบิดเกลื่อนกลาดอยู่ทั่วทั้งรหัส ไม่มีโครงสร้างใด ๆ …

5
MonoTouch vs Objective-C สำหรับการพัฒนา iPhone / iPod / iPad [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา สำหรับผู้ที่มีประสบการณ์. Net และต้องการพัฒนาสำหรับ iPhone / iPod / iPad มันคุ้มค่าที่จะเรียนรู้ Objective-C หรือไม่? MonoTouch เป็นทางเลือกที่ดีหรือไม่? อะไรคือข้อเสียเมื่อใช้ MonoTouch กับการเข้ารหัสใน Objective-C
25 c#  .net  iphone  objective-c 

7
ลำดับที่ถูกต้องในการอ่านหนังสือเหล่านี้คืออะไร? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันเป็นนักพัฒนารุ่นเยาว์ C # ฉันเรียนรู้ที่บ้านและตอนนี้ฉันได้งานแรกแล้ว :) ฉันต้องการซื้อหนังสือเหล่านี้ แต่คำสั่งที่ถูกต้องในการอ่านหนังสือเหล่านี้คืออะไร? รหัสเสร็จสมบูรณ์: คู่มือปฏิบัติของการสร้างซอฟต์แวร์ Clean Code: คู่มือของงานฝีมือซอฟต์แวร์ Agile ในทางปฏิบัติโปรแกรมเมอร์
25 c#  learning  books 

1
แนะนำวิธีปฏิบัติที่ดีที่สุดในการสร้างคลาสคงที่
คำถามนี้ถูกโยกย้ายจาก Code Exchange Stack Stack เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 5 ปีที่ผ่านมา มีการถกเถียงกันระหว่างสมาชิกในทีมของฉันเกี่ยวกับการประกาศค่าคงที่ เรากำลังเคลื่อนย้ายตัวแปรคงที่ไปยังคลาสที่แยกจากกันดังนี้ public class Constants { public const string StateId = "ST"; public const string CountryId = "CI"; } สมาชิกในทีมของฉันสองสามคนแนะนำว่าเราประกาศชั้นเรียนเป็นแบบปิดผนึกเพื่อหลีกเลี่ยงตัวเลือกการเอาชนะและมีคนแนะนำว่าเราทำเครื่องหมายว่าเป็นแบบคงที่เพื่อหลีกเลี่ยงการสร้างชั้นเรียนแบบคงที่ อย่างไรก็ตามฉันต้องการให้มันเป็นแบบปิดผนึกด้วยตัวสร้างแบบคงที่เนื่องจากมันจะช่วยให้เราสามารถเริ่มต้นตัวแปรแบบอ่านอย่างเดียวในความต้องการในอนาคต กรุณาให้คำแนะนำกับเรา
25 c#  class 

2
การกรองลูป foreach ด้วยเงื่อนไขที่ vs clause ต่อไป
ฉันเห็นโปรแกรมเมอร์บางคนใช้สิ่งนี้: foreach (var item in items) { if (item.Field != null) continue; if (item.State != ItemStates.Deleted) continue; // code } แทนที่จะใช้ที่ฉันปกติ: foreach (var item in items.Where(i => i.Field != null && i.State != ItemStates.Deleted)) { // code } ฉันเคยเห็นการรวมกันของทั้งสอง ฉันชอบการอ่านด้วยคำว่า 'ดำเนินการต่อ' โดยเฉพาะอย่างยิ่งกับเงื่อนไขที่ซับซ้อน มีความแตกต่างในประสิทธิภาพหรือไม่ ด้วยแบบสอบถามฐานข้อมูลฉันสมมติว่าจะมี สิ่งที่เกี่ยวกับรายการปกติ?

6
ทำไมคุณจะ 'รอ' วิธีการแล้วถามค่าส่งคืนทันที
ในบทความ MSDN นี้มีการให้รหัสตัวอย่างต่อไปนี้ (แก้ไขเล็กน้อยเพื่อความกะทัดรัด): public async Task<ActionResult> Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Department department = await db.Departments.FindAsync(id); if (department == null) { return HttpNotFound(); } return View(department); } FindAsyncวิธีการดึงDepartmentวัตถุโดยใช้ ID Task<Department>ของตนและผลตอบแทน จากนั้นแผนกจะถูกตรวจสอบทันทีเพื่อดูว่าเป็นโมฆะหรือไม่ ตามที่ฉันเข้าใจแล้วการขอค่าของภารกิจในลักษณะนี้จะบล็อกการเรียกใช้โค้ดจนกว่าจะส่งคืนค่าจากเมธอดที่รอคอยซึ่งส่งคืนการโทรแบบซิงโครนัสอย่างมีประสิทธิภาพ ทำไมคุณถึงทำเช่นนี้? มันจะง่ายกว่าFind(id)ไหมถ้าจะเรียกวิธีการซิงโครนัสถ้าคุณจะบล็อกทันทีล่ะ?
24 c#  .net  asp.net-mvc  async 

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