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

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

13
เราจะทำให้การทดสอบหน่วยทำงานอย่างรวดเร็วได้อย่างไร
เรามาถึงจุดที่โครงการของเราซึ่งเรามีการทดสอบเกือบหนึ่งพันครั้งและผู้คนหยุดทำงานก่อนที่จะทำการเช็คอินเพราะมันใช้เวลานานมาก อย่างดีที่สุดพวกเขาเรียกใช้การทดสอบที่เกี่ยวข้องกับชิ้นส่วนของรหัสที่พวกเขาเปลี่ยนแปลงและที่เลวร้ายที่สุดพวกเขาเพียงตรวจสอบโดยไม่ต้องทดสอบ ฉันเชื่อว่าปัญหานี้เกิดจากความจริงที่ว่าโซลูชันเพิ่มขึ้นถึง 120 โครงการ (เรามักจะทำโครงการขนาดเล็กมากและนี่เป็นเพียงครั้งที่สองที่เราทำ TDD อย่างถูกต้อง) และเวลาสร้าง + ทดสอบเพิ่มขึ้นประมาณสองถึงสามนาที บนเครื่องที่น้อยกว่า เราจะลดระยะเวลาในการทดสอบได้อย่างไร มีเทคนิคไหม? แกล้งทำมากขึ้น? แกล้งทำน้อยลงหรือไม่ บางทีการทดสอบการรวมที่ใหญ่กว่านั้นไม่ควรทำงานโดยอัตโนมัติเมื่อทำการทดสอบทั้งหมดใช่ไหม แก้ไข:เพื่อเป็นการตอบสนองต่อคำตอบหลาย ๆ คำเราใช้ CI และ build server อยู่แล้วนี่คือวิธีที่ฉันรู้ว่าการทดสอบล้มเหลว ปัญหา (จริง ๆ แล้วเป็นอาการ) คือเราได้รับข้อความเกี่ยวกับงานสร้างที่ล้มเหลว ใช้การทดสอบบางส่วนเป็นสิ่งที่คนส่วนใหญ่ทำ แต่ไม่ใช่ทั้งหมด และเกี่ยวกับการทดสอบพวกเขาทำได้ค่อนข้างดีพวกเขาใช้ของปลอมสำหรับทุกสิ่งและไม่มี IO เลย
40 c#  unit-testing  tdd  nunit 

8
ภาษา OO สมัยใหม่สามารถแข่งขันกับประสิทธิภาพการจัดเก็บอาร์เรย์ของ C ++ ได้หรือไม่
ฉันเพิ่งสังเกตเห็นว่าภาษาการเขียนโปรแกรม OO สมัยใหม่ทุกอย่างที่ฉันคุ้นเคยอย่างน้อยก็มี (ซึ่งโดยพื้นฐานแล้วก็คือ Java, C # และ D) ช่วยให้อาร์เรย์ covariant นั่นคืออาร์เรย์สตริงเป็นอาร์เรย์วัตถุ: Object[] arr = new String[2]; // Java, C# and D allow this อาร์เรย์ของ Covariant เป็นรูในระบบแบบสแตติก พวกเขาทำให้เกิดข้อผิดพลาดประเภทที่เป็นไปได้ที่ไม่สามารถตรวจพบได้ในเวลารวบรวมดังนั้นทุกการเขียนไปยังอาเรย์ต้องถูกตรวจสอบที่รันไทม์: arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException ดูเหมือนว่าจะมีประสิทธิภาพที่แย่มากถ้าฉันทำร้านค้ามากมาย C ++ ไม่มีอาร์เรย์ที่แปรปรวนร่วมดังนั้นจึงไม่จำเป็นต้องทำการตรวจสอบรันไทม์อีกต่อไปซึ่งหมายความว่าไม่มีการลงโทษประสิทธิภาพ มีการวิเคราะห์เพื่อลดจำนวนการตรวจสอบรันไทม์ที่จำเป็นหรือไม่? ตัวอย่างเช่นถ้าฉันพูดว่า: arr[1] = arr[0]; ใครจะยืนยันว่าร้านค้าไม่อาจล้มเหลว ฉันแน่ใจว่ามีการเพิ่มประสิทธิภาพที่เป็นไปได้อื่น …
40 c#  java  c++  d 

5
การใช้. ใด ๆ () ในรายการ C # <> คืออะไร
ฉันได้คุยเรื่องนี้กับเพื่อนร่วมงานและเราไม่สามารถเข้าใจได้ว่าการใช้งานนั้นมีประโยชน์.AnyสำหรับอะไรList&lt;&gt;ใน C # คุณสามารถตรวจสอบความถูกต้องขององค์ประกอบในอาร์เรย์เช่นคำสั่งต่อไปนี้: if (MyList.Any()){ ...} //Returns true or false ซึ่งเป็นสิ่งเดียวกัน if (MyList.Count() != 0) { ... } และเป็นเรื่องธรรมดามากขึ้นอ่านได้และชัดเจนเกี่ยวกับเจตนาของifข้อความ ในท้ายที่สุดเราติดอยู่กับความคิดนี้: .Any() สามารถใช้งานได้เช่นกัน แต่ไม่ชัดเจนเกี่ยวกับเจตนาของโปรแกรมเมอร์และในกรณีนี้ไม่ควรใช้ แต่เรารู้สึกว่ามันไม่ถูกต้อง เราต้องคิดถึงบางสิ่ง พวกเราคือ
40 c#  array  list 

3
ทำไมโอเปอเรเตอร์ NOT แบบลอจิคัลในภาษา C-style“!” และไม่ใช่“ ~~”?
สำหรับตัวดำเนินการไบนารีเรามีตัวดำเนินการทั้งสองบิตและตรรกะ: &amp; bitwise AND | bitwise OR &amp;&amp; logical AND || logical OR ไม่ใช่ (โอเปอเรเตอร์ unary) ทำงานแตกต่างกัน มี ~ สำหรับ bitwise และ! สำหรับตรรกะ ฉันจำไม่ได้ว่าเป็นการดำเนินการที่ไม่เป็นเอกเทศเมื่อเทียบกับ AND และหรือ แต่ฉันไม่สามารถคิดได้ว่าทำไมนักออกแบบเลือกที่จะเบี่ยงเบนจากหลักการที่ว่าซิงเกิลเป็น bitwise และ Double นั้นมีเหตุผลที่นี่และเปลี่ยนไปใช้ตัวละครอื่นแทน ฉันเดาว่าคุณสามารถอ่านมันผิดเช่นการดำเนินการสองบิตที่จะคืนค่าตัวถูกดำเนินการ แต่นั่นไม่ได้เป็นปัญหาที่แท้จริงสำหรับฉัน มีเหตุผลที่ฉันขาดหายไปหรือไม่?
39 java  c#  c++  c 

6
ข้อดีของการใช้ไฟล์. dll ผ่านการเชื่อมโยงไฟล์. cs กับโปรเจ็กต์ (สำหรับคลาสตัวช่วย / วิธีการขยายทั่วไป)
ฉันมีโครงการตัวช่วยซึ่งฉันใช้ในแอปพลิเคชันทั้งหมดที่ฉันสร้าง มันมีวิธีการขยายและเรียนผู้ช่วยทั่วไปการควบคุม ฯลฯ ฉันอัปเดต / ขยายโครงการผู้ช่วยเป็นครั้งคราว เหล่านี้มักเป็นโครงการขนาดเล็กและไม่เกี่ยวข้องและฉันเป็นคนเดียวที่ทำงานกับพวกเขาทั้งหมด ฉันลองสองวิธีในการใช้ เพิ่มไฟล์. cs โดยตรง (เพิ่มลิงค์) ไปยังแต่ละโครงการที่ฉันใช้ รวบรวมเป็น. dll และเพิ่มเป็นข้อมูลอ้างอิง ฉันเห็นประโยชน์และข้อเสียของวิธีการเหล่านี้ คนแรก: นั้นง่ายกว่าเนื่องจากคลาสตัวช่วยได้รับการคอมไพล์เป็นไฟล์ exe ดังนั้นฉันมักจะสามารถให้ไฟล์. exe เพียงไฟล์เดียวที่ใช้งานได้ดี เนื่องจากฉันเพิ่มเป็นลิงก์ฉันจึงมั่นใจได้ว่าเมื่อใดก็ตามที่ฉันสร้างโครงการใด ๆ ที่ใช้ตัวช่วยเหลือไฟล์ผู้ช่วยเหลือจะเป็นเวอร์ชันล่าสุด ยิ่งง่ายขึ้นเพราะฉันสามารถแยกไฟล์เพื่อให้วิธีการขยายของฉันที่ทำงานได้ดีบน. NET 4.0 สามารถอ้างอิงแยกต่างหากจากวิธีที่ต้องใช้. NET 4.5 ซึ่งหมายความว่าแอปโดยรวมสามารถทำงานบน. NET 4.0 ได้ ช่วยให้การแก้จุดบกพร่องผ่านรหัสที่มีประโยชน์ทั้งหมดของเบรกพอยต์ ฯลฯ ฯลฯ ... ดูเหมือนจะไม่ใช่ 'การปฏิบัติที่ดีที่สุด' คนที่สอง: ดูเหมือนจะเป็นแนวทางที่ถูกต้อง แต่: ต้องการให้ฉันส่งไฟล์. dll แยกต่างหากซึ่งด้วยเหตุผลบางอย่างยากกว่าสำหรับผู้ใช้ (พวกเขามักจะแบ่งปันโปรแกรมของฉันโดยไม่ใช้. dll …
38 c#  dll 

5
เหตุใด C # จึงไม่มีขอบเขตในบล็อกกรณี
ฉันกำลังเขียนรหัสนี้: private static Expression&lt;Func&lt;Binding, bool&gt;&gt; ToExpression(BindingCriterion criterion) { switch (criterion.ChangeAction) { case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x =&gt; x.Action == action); case BindingType.ExplicitValue: var action = (byte)ChangeAction.SetValue; return (x =&gt; x.Action == action); default: // TODO: Localize errors throw new InvalidOperationException("Invalid criterion."); } } และรู้สึกประหลาดใจที่พบข้อผิดพลาดในการคอมไพล์: ตัวแปรท้องถิ่นชื่อ 'การกระทำ' ถูกกำหนดไว้แล้วในขอบเขตนี้ …

5
ผ่าน ID หรือวัตถุ?
เมื่อระบุวิธีตรรกะทางธุรกิจเพื่อรับเอนทิตีโดเมนพารามิเตอร์ควรยอมรับวัตถุหรือ ID หรือไม่ ตัวอย่างเช่นเราควรทำสิ่งนี้: public Foo GetItem(int id) {} หรือสิ่งนี้: public Foo GetItem(Foo foo) {} ฉันเชื่อในการส่งวัตถุไปรอบ ๆ อย่างครบถ้วน แต่สิ่งที่เกี่ยวกับกรณีนี้ที่เราได้รับวัตถุและเรารู้ ID เท่านั้น ผู้โทรควรสร้าง Foo ที่ว่างเปล่าและตั้ง ID หรือควรส่ง ID ไปที่เมธอด? เนื่องจาก Foo ที่เข้ามาจะว่างเปล่ายกเว้น ID ฉันไม่เห็นประโยชน์ของผู้โทรที่ต้องสร้าง Foo และตั้ง ID เมื่อมันสามารถส่ง ID ไปยังวิธี GetItem ()

4
การมีค่าคงที่สาธารณะ“ ไม่ดี” หรือไม่?
นี่คือ: public MyClass { public const string SomeString = "SomeValue"; } เลวร้ายยิ่งกว่านี้: public MyClass { public static string SomeString { get{ return "SomeValue";}} } ทั้งสองสามารถอ้างอิงได้ในลักษณะเดียวกัน: if (someString == MyClass.SomeString) ... อย่างไรก็ตามที่สองมีการป้องกันการเป็นทรัพย์สิน แต่ที่จริงแล้วมันดีกว่า const มากแค่ไหน? ฉันได้เรียนรู้เกี่ยวกับอันตรายจากการมีทุ่งสาธารณะ ดังนั้นเมื่อฉันเห็นรหัสบางส่วนโดยใช้ค่าคงที่เหล่านี้ในเขตข้อมูลสาธารณะฉันตั้งค่าทันทีเกี่ยวกับการปรับโครงสร้างให้เป็นคุณสมบัติ แต่ผ่านไปครึ่งทางฉันก็ต้องสงสัยว่ามันจะมีประโยชน์อะไรที่จะมีคุณสมบัติคงที่มากกว่าค่าคงที่ ความคิดใด ๆ
38 c# 

10
WPF กับ WinForms - มุมมองของโปรแกรมเมอร์ Delphi หรือไม่?
ฉันได้อ่านหัวข้อหลัก ๆ ใน WPF กับ WinForms แล้วและฉันพบว่าตัวเองติดอยู่ในความสับสนที่คุณสามารถตกหลุมได้เมื่อตัดสินใจระหว่างเทคโนโลยีที่ผ่านการทดลองและจริงมาแล้ว (Winforms) และเป็นตัวตายตัวแทน (WPF) ฉันเป็นโปรแกรมเมอร์ Delphi ที่มีประสบการณ์มาหลายปีจนทำให้ C # โปรแกรมเมอร์ Delphi เพื่อนของฉันออกไปที่นั่นจะเข้าใจว่าฉันตื่นเต้นที่จะรู้ว่า Anders Hejlsberg จากชื่อเสียงของ Delphi คือสถาปนิกด้านหลัง C # ฉันมีความแข็งแกร่งในส่วนประกอบที่กำหนดเองของ VCL ของ Delphi โดยเฉพาะอย่างยิ่งผู้ที่เกี่ยวข้องในการสร้างวิซาร์ดและส่วนประกอบหลายขั้นตอนที่ทำหน้าที่เป็นภาชนะสำหรับส่วนประกอบของเด็ก ด้วยพื้นหลังนั้นฉันหวังว่าพวกคุณที่เปลี่ยนจาก Delphi เป็น C # สามารถช่วยฉันในการตัดสินใจ WinForms vs. WPF สำหรับการเขียนแอปพลิเคชันเริ่มต้นของฉัน หมายเหตุฉันรู้สึกกระวนกระวายใจมากเมื่อการเขียนโค้ดและสิ่งต่าง ๆ เช่นการสนับสนุนการดีบักเกอร์ที่สมบูรณ์แบบอัตโนมัติเต็มรูปแบบและเหมาะสมสามารถสร้างหรือทำลายโปรเจ็กต์สำหรับฉันรวมถึงความสามารถในการค้นหาข้อมูลที่พร้อมใช้งานบนคุณสมบัติ API และการโทร . หัวข้อและความคิดเห็น SO ในช่วงวันที่ต้นปี 2009 …
38 c#  wpf  winforms  delphi  microsoft 

6
ตัวอย่างที่ดีของรหัสที่ซับซ้อนโดยใช้ TDD [ปิด]
อะไรจะเป็นตัวอย่างที่ดีของการใช้ TDD ในโครงการขนาดใหญ่ชีวิตจริงที่ซับซ้อน? ตัวอย่างทั้งหมดที่ฉันเคยเห็นเป็นโครงการของเล่นสำหรับหนังสือหรือกระดาษ ... คุณสามารถตั้งชื่อโครงการโอเพ่นซอร์สที่ใช้ TDD อย่างหนักได้หรือไม่? โดยเฉพาะอย่างยิ่งใน C ++ แต่ฉันสามารถอ่าน Java และ C # หรือภาษาอื่นที่คล้ายคลึงกัน
37 java  c#  open-source  c++  tdd 

5
มันเพียงพอสำหรับวิธีการที่จะโดดเด่นเพียงแค่ชื่ออาร์กิวเมนต์ (ไม่พิมพ์)?
มันเพียงพอสำหรับวิธีการที่จะโดดเด่นเพียงแค่ชื่ออาร์กิวเมนต์ (ไม่พิมพ์) หรือมันจะดีกว่าที่จะตั้งชื่ออย่างชัดเจนมากขึ้น? ยกตัวอย่างเช่นVST Find&lt;T&gt;(int id)T FindById&lt;T&gt;(int id) มีเหตุผลที่ดีที่จะตั้งชื่ออย่างชัดเจนยิ่งขึ้น (เช่นการเพิ่มById) และการเก็บชื่ออาร์กิวเมนต์เพียงอย่างเดียวหรือไม่ เหตุผลหนึ่งที่ฉันคิดได้ก็คือเมื่อลายเซ็นของวิธีการเหมือนกัน แต่มีความหมายแตกต่างกัน FindByFirstName(string name) และ FindByLastName(string name)

6
วิธีที่ดีที่สุดในการเริ่มต้นการอ้างอิงของเด็กถึงผู้ปกครองคืออะไร
ฉันกำลังพัฒนาโมเดลวัตถุที่มีคลาสแม่ / ลูกที่แตกต่างกันจำนวนมาก แต่ละวัตถุลูกมีการอ้างอิงถึงวัตถุแม่ของมัน ฉันสามารถนึกถึง (และลอง) หลายวิธีในการเริ่มต้นการอ้างอิงผู้ปกครอง แต่ฉันพบข้อบกพร่องที่สำคัญสำหรับแต่ละวิธี ให้แนวทางที่อธิบายไว้ด้านล่างซึ่งดีที่สุด ... หรือสิ่งที่ดียิ่งขึ้น ฉันจะไม่ตรวจสอบว่ารหัสด้านล่างรวบรวมดังนั้นโปรดลองดูความตั้งใจของฉันถ้ารหัสไม่ถูกต้อง syntactically โปรดทราบว่าตัวสร้างคลาสลูกของฉันบางคนใช้พารามิเตอร์ (นอกเหนือจากแม่) แม้ว่าฉันจะไม่แสดงใด ๆ ผู้เรียกมีหน้าที่ตั้งค่าพาเรนต์และเพิ่มในพาเรนต์เดียวกัน class Child { public Child(Parent parent) {Parent=parent;} public Parent Parent {get; private set;} } class Parent { // singleton child public Child Child {get; set;} //children private List&lt;Child&gt; _children = new List&lt;Child&gt;(); …

5
เป็นวิธีปฏิบัติที่ดีในการสร้าง ClassCollection ของคลาสอื่นหรือไม่?
ให้บอกว่าฉันมีCarคลาส: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } ให้บอกว่าเรากำลังสร้างระบบเกี่ยวกับที่จอดรถฉันจะใช้Carคลาสจำนวนมากดังนั้นเราจึงสร้างCarCollectionคลาสมันอาจมีวิธีการโฆษณาสองสามอย่างเช่นFindCarByModel: public class CarCollection { public List&lt;Car&gt; Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

5
ฉันผิดที่คิดว่าต้องการบางอย่างเช่น AutoMapper เป็นสิ่งบ่งบอกถึงการออกแบบที่ไม่ดีหรือไม่?
Automapperเป็น "ผู้ทำแผนที่วัตถุ - วัตถุ" สำหรับ. Net ซึ่งหมายถึงการคัดลอกวัตถุจากคลาสไปยังคลาสอื่นที่แสดงถึงสิ่งเดียวกัน ทำไมสิ่งนี้ถึงมีประโยชน์ การทำซ้ำของคลาสเคยมีประโยชน์ / ออกแบบดีหรือไม่?
35 c#  design  .net 

3
ข้อความที่ส่งผ่านใน OO คืออะไร?
ฉันได้เรียนรู้การเขียนโปรแกรม OO เป็นหลักใน C ++, C # และ Java ฉันคิดว่าฉันมีความเข้าใจเป็นอย่างดีเกี่ยวกับความเข้าใจของฉันเกี่ยวกับการห่อหุ้มการสืบทอดและความหลากหลาย (รวมถึงการอ่านคำถามจำนวนมากบนไซต์นี้) สิ่งหนึ่งที่ดูเหมือนจะปรากฏขึ้นที่นี่และมีแนวคิดของ "การส่งข้อความ" เห็นได้ชัดว่านี่คือสิ่งที่ไม่ได้ใช้ในขณะที่การเขียนโปรแกรม OO ในภาษาหลักของวันนี้ แต่ได้รับการสนับสนุนโดย Smalltalk คำถามของฉันคือ: ข้อความผ่านคืออะไร (มีคนให้ตัวอย่างที่เป็นประโยชน์ได้หรือไม่) มีการสนับสนุน "ข้อความส่งผ่าน" นี้ใน C ++, C # หรือ Java หรือไม่
35 java  c#  c++  object-oriented 

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