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

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

3
การตรวจจับ IEnumerable“ สถานะเครื่อง”
ฉันเพิ่งอ่านบทความที่น่าสนใจที่เรียกว่าน่ารักเกินไปกับผลตอบแทน c # มันทำให้ฉันสงสัยว่าวิธีที่ดีที่สุดคือการตรวจสอบว่า IEnumerable เป็นคอลเล็กชันที่นับได้จริงหรือว่าเป็นเครื่องสถานะที่สร้างด้วยคีย์เวิร์ด yield ตัวอย่างเช่นคุณสามารถแก้ไข DoubleXValue (จากบทความ) เป็นดังนี้: private void DoubleXValue(IEnumerable<Point> points) { if(points is List<Point>) foreach (var point in points) point.X *= 2; else throw YouCantDoThatException(); } คำถามที่ 1) มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่? คำถามที่ 2) นี่คือสิ่งที่ฉันควรกังวลเมื่อสร้าง API หรือไม่
17 c#  api-design 

1
แบบแผนการใช้อักษรตัวพิมพ์ใหญ่สำหรับฟิลด์ที่มีการป้องกัน C #
การใช้อักษรตัวพิมพ์ใหญ่สำหรับชื่อฟิลด์ที่ได้รับการป้องกันใน C # คืออะไร มัน _myVar (เช่นฟิลด์ส่วนตัว) หรือ MyVar (ชอบคุณสมบัติ) หรือไม่

3
รูปแบบของรัฐละเมิดหลักการทดแทน Liskov หรือไม่?
ภาพนี้นำมาจากการใช้การออกแบบและรูปแบบที่ใช้โดเมนขับเคลื่อน: พร้อมตัวอย่างใน C # และ. NET นี่คือแผนภาพคลาสสำหรับรูปแบบสถานะที่ a SalesOrderสามารถมีสถานะต่างกันในช่วงเวลาของชีวิต อนุญาตให้ช่วงการเปลี่ยนภาพบางอย่างระหว่างรัฐที่แตกต่างกัน ตอนนี้OrderStateคลาสเป็นabstractคลาสและวิธีการทั้งหมดได้รับการสืบทอดไปยังคลาสย่อย หากเราพิจารณาคลาสย่อยCancelledซึ่งเป็นสถานะสุดท้ายที่ไม่อนุญาตให้มีการเปลี่ยนสถานะเป็นสถานะอื่นเราจะต้องoverrideใช้วิธีการทั้งหมดในคลาสนี้เพื่อโยนข้อยกเว้น ตอนนี้ไม่ได้เป็นการละเมิดหลักการทดแทนของ Liskov เนื่องจาก sublcass ไม่ควรเปลี่ยนพฤติกรรมของผู้ปกครองหรือไม่ การเปลี่ยนคลาสนามธรรมเป็นอินเตอร์เฟสแก้ไขสิ่งนี้หรือไม่? จะแก้ไขได้อย่างไร?

5
วิธีทำให้การสร้างโหมดดูที่รันไทม์เจ็บปวดน้อยลง
ฉันขอโทษสำหรับคำถามยาว ๆ มันอ่านได้เล็กน้อยว่าเป็นคำโหยหวน แต่ฉันสัญญาว่ามันจะไม่! ฉันได้สรุปคำถามของฉันด้านล่าง ในโลกของ MVC สิ่งต่าง ๆ ตรงไปตรงมา รูปแบบมีสถานะมุมมองแสดงรูปแบบและตัวควบคุมทำสิ่งต่าง ๆ เพื่อ / กับรุ่น (โดยทั่วไป) ตัวควบคุมไม่มีสถานะ ในการทำสิ่งต่าง ๆ ที่คอนโทรลเลอร์มีการขึ้นต่อกันของบริการบนเว็บ, ที่เก็บ, ล็อต เมื่อคุณยกตัวอย่างคอนโทรลเลอร์ที่คุณสนใจเกี่ยวกับการจัดหาการพึ่งพาเหล่านั้นไม่มีอะไรอื่น เมื่อคุณเรียกใช้การกระทำ (เมธอดบนตัวควบคุม) คุณใช้การอ้างอิงเหล่านั้นเพื่อดึงหรืออัปเดตโมเดลหรือเรียกบริการโดเมนอื่น ๆ หากมีบริบทใด ๆ ให้พูดเช่นผู้ใช้บางคนต้องการดูรายละเอียดของรายการใดรายการหนึ่งคุณจะส่ง Id ของรายการนั้นเป็นพารามิเตอร์ไปยัง Action ไม่มีที่ใดในคอนโทรลเลอร์มีการอ้างอิงถึงสถานะใด ๆ จนถึงตอนนี้ดีมาก ป้อน MVVM ฉันรัก WPF ฉันรักการผูกข้อมูล ฉันรักเฟรมเวิร์กที่ทำให้การผูกข้อมูลกับ ViewModels ง่ายยิ่งขึ้น (โดยใช้ Caliburn Micro atm) ฉันรู้สึกว่าสิ่งต่าง ๆ …
17 c#  design  wpf  mvvm 

1
C # -4.0 เป็นมาตรฐานแบบเปิดหรือไม่
มาตรฐาน Ecma-334 (ISO / IEC 23270: 2006) สอดคล้องกับรุ่น 2.0 ของภาษา ข้อมูลจำเพาะของรุ่น 4.0 สามารถใช้งานได้อย่างอิสระจาก Microsoft แต่รายการคุณสมบัติเปิดของ Microsoft จะแสดงเฉพาะรุ่น Ecma (รุ่น 2.0) เท่านั้น ดังนั้นคุณสมบัติที่ดีทั้งหมดที่เพิ่มเข้ามาในรุ่นหลัง (LINQ, ฟังก์ชั่นแลมบ์ดา, ฯลฯ ) หนึ่งสามารถใช้พวกเขาในคอมไพเลอร์ของเขา?
17 c#  legal  standards 

4
ฉีดพึ่งพาและ Singleton พวกเขาทั้งสองแนวคิดที่แตกต่างกันอย่างสิ้นเชิง?
ฉันเคยได้ยินเกี่ยวกับการใช้การฉีดขึ้นเหนือ Singleton สำหรับเพื่อนร่วมงานของฉัน ฉันยังไม่สามารถบอกได้ว่ามันเป็นสองรูปแบบมุมฉากซึ่งสามารถแทนที่ด้วยอีกรูปแบบหนึ่งได้หรือไม่? หรือ DI เป็นวิธีที่ทำให้รูปแบบซิงเกิลทดสอบได้หรือไม่? โปรดดูข้อมูลโค้ดต่อไปนี้ IMathFace obj = Singleton.Instance; SingletonConsumer singConsumer = new SingletonConsumer(obj); singConsumer.ConsumerAdd(10,20); ยอมรับพารามิเตอร์ของชนิดSingletonConsumer IMathFaceแทนที่จะเข้าถึงคลาส singleton ภายในSingletonConsumerจะได้รับอินสแตนซ์ singleton ที่ส่งโดยผู้เรียก นี่เป็นตัวอย่างที่ดีของการบริโภคคลาสซิงเกิลผ่านการฉีดแบบพึ่งพาหรือไม่

2
บทคัดย่อยกเว้นชนิดซุปเปอร์
หากการขว้างปาSystem.Exceptionถือว่าแย่มากทำไมไม่Exceptionทำabstractในตอนแรก? ด้วยวิธีนี้มันเป็นไปไม่ได้ที่จะโทร: throw new Exception("Error occurred."); สิ่งนี้จะบังคับใช้การยกเว้นที่ได้รับเพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดที่เกิดขึ้น ตัวอย่างเช่นเมื่อฉันต้องการให้ลำดับชั้นข้อยกเว้นที่กำหนดเองสำหรับห้องสมุดฉันมักจะประกาศคลาสฐานนามธรรมสำหรับข้อยกเว้นของฉัน: public abstract class CustomExceptionBase : Exception { /* some stuff here */ } แล้วมีข้อยกเว้นบางอย่างที่มีจุดประสงค์เฉพาะเจาะจงมากขึ้น: public class DerivedCustomException : CustomExceptionBase { /* some more specific stuff here */ } จากนั้นเมื่อเรียกเมธอดไลบรารี่ใด ๆ เราสามารถลอง / แทร็กบล็อคทั่วไปเพื่อดักจับข้อผิดพลาดที่มาจากไลบรารีโดยตรง: try { /* library calls here */ } catch …

9
Java จะทันกับ C # หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา วันนี้ฉันโพสต์คำถามที่ถามว่าภาษา C # หรือ Java น่าจะดีกว่าสำหรับฉันในการศึกษา ฉันมีคำตอบที่ดี สิ่งหนึ่งที่เกิดขึ้นคือบางที Java ตอนนี้ค่อนข้างล้าหลัง C # ที่มีคุณสมบัติใหม่ ฉันเห็นบางลิงค์ของเว็บและชี้ให้เห็นว่า C # มีอะไรและจาวาอะไรที่ไม่มี ดังนั้นคำถามของฉันสำหรับคุณทั้งหมดคือ Java จะทันกับ C # อีกครั้ง? และถ้าคุณต้องเดาว่ามันจะอยู่ในเวลา 5 ปี มันจะมีทุกสิ่งที่บางทีตอนนี้อาจหายไป? Java 7 เป็นอย่างไร?
17 java  c# 

9
หาก statments อยู่ในวิธีด้านในหรือด้านนอก?
ข้อใดของการออกแบบเหล่านี้ดีกว่า ข้อดีและข้อเสียของแต่ละข้อคืออะไร? คุณจะใช้อันไหน ข้อเสนอแนะอื่น ๆ ของวิธีการจัดการกับวิธีการที่ชอบจะได้รับการชื่นชม มีเหตุผลที่จะสมมติว่า Draw () เป็นที่เดียวที่มีวิธีการดึงอื่น ๆ ถูกเรียก สิ่งนี้ต้องการที่จะขยายไปยังเมธอด Draw * และคุณสมบัติ Show * อีกมากมายไม่ใช่แค่สามวิธีที่แสดงไว้ที่นี่ public void Draw() { if (ShowAxis) { DrawAxis(); } if (ShowLegend) { DrawLegend(); } if (ShowPoints && Points.Count > 0) { DrawPoints(); } } private void DrawAxis() { // Draw things. …
17 c# 

4
CQRS / MediatR นั้นคุ้มค่าหรือไม่เมื่อพัฒนาแอปพลิเคชัน ASP.NET
ฉันได้ดู CQRS / MediatR เมื่อเร็ว ๆ นี้ แต่ยิ่งฉันเจาะลึกยิ่งฉันชอบมากเท่าไร บางทีฉันอาจเข้าใจผิดบางอย่าง / ทุกอย่าง ดังนั้นมันจึงยอดเยี่ยมโดยอ้างว่าลดคอนโทรลเลอร์ของคุณลงไป public async Task<ActionResult> Edit(Edit.Query query) { var model = await _mediator.SendAsync(query); return View(model); } ซึ่งเข้ากันได้อย่างสมบูรณ์แบบกับชุดควบคุมแบบบาง อย่างไรก็ตามจะมีรายละเอียดที่สำคัญออกไปบ้าง ให้ดูที่การLoginกระทำเริ่มต้นจากโครงการ MVC ใหม่ public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { // This doesn't …

4
การประกาศตัวแปรส่งคืนใน c # methods เทียบกับการคืนค่าโดยตรง
ในการถกเถียงเกี่ยวกับตัวแปรส่งคืนสมาชิกบางคนในทีมต้องการวิธีการส่งคืนผลลัพธ์โดยตรงไปยังผู้โทรในขณะที่คนอื่น ๆ ต้องการประกาศตัวแปรส่งคืนที่ส่งกลับไปยังผู้โทรแล้ว (ดูตัวอย่างโค้ดด้านล่าง) อาร์กิวเมนต์หลังคืออนุญาตให้นักพัฒนาที่ทำการดีบั๊กโค้ดเพื่อค้นหาค่าส่งคืนของเมธอดก่อนที่มันจะส่งกลับไปยังผู้เรียกดังนั้นจึงทำให้โค้ดเข้าใจง่ายขึ้น: นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งที่การเรียกใช้เมธอดนั้น มีแนวทางใดบ้างที่มีประสิทธิภาพมากที่สุดและ / หรือมีเหตุผลอื่นใดที่ทำให้เราควรนำสไตล์หนึ่งมาใช้กับสไตล์อื่น? ขอบคุณ private bool Is2(int a) { return a == 2; } private bool Is3(int a) { var result = a == 3; return result; }

4
วิธีที่ดีที่สุดในการจัดระเบียบไฟล์คลาสและส่วนต่อประสาน
ตกลง .. หลังจากการสนทนาทั้งหมดฉันเปลี่ยนคำถามเล็กน้อยเพื่อให้สะท้อนตัวอย่างที่เป็นรูปธรรมที่ฉันจัดการดีขึ้น ฉันมีสองคลาสModelOneและคลาสModelTwoเหล่านี้มีฟังก์ชันการทำงานที่คล้ายกัน แต่ไม่เกี่ยวข้องกัน แต่ฉันมีชั้นที่สามCommonFuncที่มีบางฟังก์ชันการทำงานของประชาชนที่จะดำเนินการทั้งในModelOneและและได้รับปัจจัยจากการเป็นต่อModelTwo DRYทั้งสองรุ่นมีอินสแตนซ์ภายในModelMainคลาส (ซึ่งเป็นอินสแตนซ์ในระดับที่สูงขึ้น ฯลฯ - แต่ฉันหยุดที่ระดับนี้) ภาชนะ IoC ว่าฉันใช้เป็นไมโครซอฟท์สามัคคี ฉันไม่แกล้งทำเป็นผู้เชี่ยวชาญ แต่ฉันเข้าใจว่าคุณลงทะเบียน tuple ของ interface และ class กับ container และเมื่อคุณต้องการ class คอนกรีตคุณถาม IoC container สำหรับวัตถุใด ๆ ที่ตรงกับ interface เฉพาะ นี่ก็หมายความว่าสำหรับทุกวัตถุที่ฉันต้องการยกตัวอย่างจาก Unity จะต้องมีอินเตอร์เฟสที่ตรงกัน เพราะแต่ละชั้นเรียนของฉันดำเนินการที่แตกต่างกัน (และไม่ทับซ้อนกัน) ฟังก์ชั่นนี้หมายถึงว่ามีอัตราส่วน 1: ระหว่างอินเตอร์เฟซและชั้น 1 1 อย่างไรก็ตามมันไม่ได้หมายความว่าฉันกำลังเขียนอินเทอร์เฟซสำหรับแต่ละคลาสที่ฉันเขียน ดังนั้นรหัสฉลาดฉันท้ายด้วย2 : public interface ICommonFunc { …

6
เมื่อใดที่ enums ไม่มีกลิ่นรหัส
ภาวะที่กลืนไม่เข้าคายไม่ออก ฉันได้อ่านหนังสือฝึกหัดที่ดีที่สุดมากมายเกี่ยวกับการฝึกฝนเชิงวัตถุและหนังสือเกือบทุกเล่มที่ฉันอ่านมีส่วนที่พวกเขาบอกว่า enums เป็นกลิ่นรหัส ฉันคิดว่าพวกเขาพลาดส่วนที่พวกเขาอธิบายเมื่อ enums ถูกต้อง ดังนั้นฉันกำลังมองหาแนวทางและ / หรือกรณีการใช้งานที่ enums ไม่ได้กลิ่นรหัสและในความเป็นจริงโครงสร้างที่ถูกต้อง แหล่งที่มา: "คำเตือนตามกฎของหัวแม่มือ, enums เป็นรหัสที่มีกลิ่นและควรได้รับการ refactored เพื่อเรียน polymorphic [8]" Seemann, Mark, การฉีดพึ่งพาใน. Net, 2011, p. 342 [8] Martin Fowler et al., Refactoring: การปรับปรุงการออกแบบของรหัสที่มีอยู่ (นิวยอร์ก: Addison-Wesley, 1999), 82 บริบท สาเหตุของภาวะที่กลืนไม่เข้าคายไม่ออกของฉันคือการซื้อขาย API พวกเขาให้กระแสข้อมูล Tick โดยส่งผ่านวิธีนี้: void TickPrice(TickType tickType, double value) ที่ไหน …

1
โครงสร้างไดเร็กทอรีสำหรับ. NET Solution
เราไปเยี่ยมผู้รับเหมาเมื่อเร็ว ๆ นี้ซึ่งได้ถามวิธีการของเราในการจัดทำโครงการ โปรดทราบว่าฉันหมายถึงโครงสร้างไดเรกทอรีโดยเฉพาะ เขาแนะนำให้ใช้แนวทางของ Microsoft ฉันคิดว่าฉันจะสามารถใช้ Google "Microsoft แนวทาง. โครงสร้างไดเรกทอรีโครงการ NET." และพบสิ่งที่เป็นประโยชน์ แต่สิ่งนี้ได้พิสูจน์แล้วว่าไม่เป็นเช่นนั้น เนื่องจากเราทำสิ่งนี้: [Company.System.Feature] |-doc |Sandcastle project |-lib |Nuget packages |-src |-Project1 e.g. web |-Project2 e.g. business logic |-UnittestProject1 |-Specs โฟลเดอร์ doc มีโซลูชัน Sandcastle ตามที่อธิบายไว้ที่นี่: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (ดูที่: เส้นทางสัมบูรณ์และเส้นทางสัมพัทธ์) ดังนั้นโฟลเดอร์ doc มีโฟลเดอร์ช่วยเหลือซึ่งมีไฟล์ช่วยเหลือที่สร้างขึ้น โฟลเดอร์ lib มีแพ็คเกจ Nuget ทั้งหมด มีแนวทางของ Microsoft …
16 c#  visual-studio 

6
แยกหน่วยทดสอบตามความต้องการหรือวิธีการ
ก่อนอื่นขอโทษสำหรับชื่อฉันไม่สามารถคิดถึงวิธีที่ง่ายที่สุดในการอธิบาย! ฉันมีวิธีที่ฉันต้องการเขียนการทดสอบหน่วยสำหรับ ฉันจะให้มันค่อนข้างทั่วไปเพราะฉันไม่ต้องการพูดคุยเกี่ยวกับการใช้งานของวิธีการเพียงแค่การทดสอบของมัน วิธีการคือ: public void HandleItem(item a) { CreateNewItem(); UpdateStatusOnPreviousItem(); SetNextRunDate(); } ดังนั้นคลาสนี้มีวิธีพับลิกหนึ่งที่เรียกใช้เมธอดส่วนตัวเพื่อทำตรรกะ ดังนั้นเมื่อเขียนการทดสอบหน่วยฉันต้องการตรวจสอบทั้งสามสิ่งได้ทำไปแล้ว ในขณะที่พวกเขาทั้งหมดถูกเรียกใช้ในการทำงานเดียวกันฉันคิดว่าฉันสามารถทำได้เป็นแบบทดสอบเดียว: public void GivenItem_WhenRun_Thenxxxxx { HandleItem(item); // Assert item has been created // Assert status has been set on the previous item // Assert run date has been set } แต่ฉันคิดว่าฉันสามารถเขียนเป็นแบบทดสอบแยกกันสามแบบ: public void GivenItem_WhenRun_ThenItemIsCreated() { …
16 c#  unit-testing 

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