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

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

3
เป็นไปได้หรือไม่ที่จะใช้ตารางแฮชแบบกระจายโดยไม่ต้องใช้ตัวดำเนินการ%
ฉันต้องการใช้ตารางแฮชที่กระจายอย่างรวดเร็วใน C # ฉันมีปัญหาในการเลือกฟังก์ชั่นแฮช จำกัด ของฉันที่ใช้รหัสแฮชตามอำเภอใจและ "จำกัด " มันเพื่อให้สามารถใช้สร้างดัชนีถังได้ มีสองตัวเลือกที่ฉันเห็น: ในมือข้างหนึ่งคุณสามารถตรวจสอบให้แน่ใจว่าถังของคุณมีองค์ประกอบจำนวนมากเสมอและเพื่อ จำกัด การแฮชคุณเพียงแค่ปรับค่าตามจำนวนถัง นี่คือความจริงแล้วพจนานุกรมของ. NET ทำอะไร ปัญหาของวิธีนี้คือการใช้% ช้ามากเมื่อเทียบกับการปฏิบัติการอื่น ถ้าคุณมองไปที่ตารางการเรียนการสอน Agner ตัดหมอก , idiv(ซึ่งเป็นรหัสการชุมนุมที่ได้รับการสร้างขึ้นสำหรับ%) มีการเรียนการสอนแฝง ~ 25 รอบสำหรับโปรเซสเซอร์ Intel ใหม่ เปรียบเทียบนี้เพื่อรอบ 3 mulหรือ 1 สำหรับ Ops บิตเช่นand, หรือorxor ในทางกลับกันคุณสามารถมีจำนวนของถังเสมอได้ 2 คุณยังจะต้องคำนวณโมดูลัสของแฮชดังนั้นคุณจึงไม่ได้พยายามทำดัชนีนอกอาร์เรย์ แต่คราวนี้มันจะมีราคาไม่แพง . เนื่องจากกำลังของ 2 % Nเป็นเพียง& (N - 1)ข้อ จำกัด …

3
ใน DDD ที่เก็บควรเปิดเผยเอนทิตีหรือวัตถุโดเมน?
ตามที่ฉันเข้าใจใน DDD มีความเหมาะสมที่จะใช้รูปแบบพื้นที่เก็บข้อมูลที่มีรูทรวม คำถามของฉันคือฉันควรส่งคืนข้อมูลเป็นนิติบุคคลหรือวัตถุโดเมน / DTO หรือไม่ บางทีรหัสบางอย่างจะอธิบายคำถามของฉันเพิ่มเติม: เอกลักษณ์ public class Customer { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } ฉันควรทำอะไรแบบนี้ public Customer GetCustomerByName(string name) { /*some code*/ } หรืออะไรแบบนี้ public class CustomerDTO { public …

3
Foreach loop และการกำหนดค่าเริ่มต้นตัวแปร
มีความแตกต่างระหว่างโค้ดสองเวอร์ชันนี้หรือไม่? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } คอมไพเลอร์ไม่สนใจหรือ? เมื่อฉันพูดถึงความแตกต่างฉันหมายถึงในแง่ของประสิทธิภาพและการใช้หน่วยความจำ .. หรือโดยทั่วไปเพียงแค่ความแตกต่างใด ๆ หรือทำสองท้ายเป็นรหัสเดียวกันหลังจากรวบรวม?
11 c#  performance  memory 

1
เหตุใดจึงไม่สามารถโอเวอร์โหลดตัวดำเนินการผสมใน C # ได้
ชื่อจะทำให้เข้าใจผิดดังนั้นโปรดอ่านคำถามทั้งหมด :-) โดย "ผู้ประกอบการที่ได้รับมอบหมายสารประกอบ" ผมมีในใจสร้างเช่นนี้ยกตัวอย่างเช่นop= +=ตัวดำเนินการกำหนดค่าบริสุทธิ์ ( =) ไม่ได้อยู่ในคำถามของฉัน โดย "ทำไม" ฉันไม่ได้หมายถึงความเห็น แต่เป็นแหล่งข้อมูล (หนังสือบทความ ฯลฯ ) เมื่อนักออกแบบบางคนหรือเพื่อนร่วมงาน ฯลฯ แสดงเหตุผลของพวกเขา(เช่นแหล่งที่มาของตัวเลือกการออกแบบ) ฉันงงงวยด้วยความไม่สมดุลที่พบใน C ++ และ C # ( ใช่ฉันรู้ว่า C # ไม่ใช่ C ++ 2.0 ) - ใน C ++ คุณต้องโอเวอร์โหลดโอเปอเรเตอร์+=แล้วเขียน+ตัวดำเนินการที่เหมาะสมโดยอัตโนมัติอาศัยโอเปอเรเตอร์ที่กำหนดไว้ก่อนหน้านี้ ใน C # เป็นแบบย้อนกลับ - คุณโอเวอร์โหลด+และ+=สังเคราะห์สำหรับคุณ หากฉันไม่เข้าใจผิดวิธีการในภายหลังจะฆ่าโอกาสในการปรับให้เหมาะสมในกรณีของจริง+=เนื่องจากต้องสร้างวัตถุใหม่ ดังนั้นจะต้องมีข้อได้เปรียบที่ยิ่งใหญ่ของวิธีการดังกล่าว แต่ MSDN อายเกินกว่าจะบอกได้ …

3
วิธีการตรวจสอบโปรแกรมระยะยาวโดยทางโปรแกรม
สิ่งที่ฉันได้ในขณะนี้สามารถสรุปได้ด้วยรหัสหลอกนี้: public static void Main(string[] args) { var listOfObjects = Database.GetObjectsToUploadToOnlineService(); Parallel.ForEach(Upload) } private static void Upload(MyUploadObject obj) { //Build object (takes a few milliseconds) //Format to JSON (takes a few more milliseconds) //Upload (can take up to a max of 10 minutes) //Wait for a response (can take up …

2
เพราะเหตุใดคำหลัก 'out' จึงถูกใช้ในบริบทที่แตกต่างกันสองดูเหมือน
ใน C # outคำหลักสามารถใช้ได้สองวิธีที่ต่างกัน เป็นโมดิฟายเออร์พารามิเตอร์ที่อาร์กิวเมนต์ถูกส่งผ่านโดยการอ้างอิง class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } } ในฐานะที่เป็นตัวปรับแต่งพารามิเตอร์ชนิดเพื่อระบุความแปรปรวน // Covariant interface. interface ICovariant<out R> { } // Extending covariant interface. interface IExtCovariant<out R> : …

4
ทางเลือกแทนมรดกหลายอย่างสำหรับสถาปัตยกรรมของฉัน (NPC ในเกมกลยุทธ์เรียลไทม์)?
การเข้ารหัสไม่ว่าหนักจริง ส่วนที่ยากคือการเขียนโค้ดที่อ่านเข้าใจง่าย ดังนั้นฉันต้องการได้นักพัฒนาที่ดีขึ้นและสร้างสถาปัตยกรรมที่มั่นคง ดังนั้นฉันต้องการสร้างสถาปัตยกรรมสำหรับNPCในวิดีโอเกม มันเป็นเกม Realtime Strategy เช่น Starcraft, Age of Empires, Command & Conquers ฯลฯ ดังนั้นฉันจะมี NPC หลายแบบ NPC สามารถมีความสามารถจำนวนมาก (วิธีการ) ของเหล่านี้: Build(), และFarm()Attack() ตัวอย่าง: คนทำงานสามารถBuild()และFarm() นักรบสามารถAttack() CitizenสามารถBuild(), Farm()และAttack() ชาวประมงสามารถFarm()และAttack() ฉันหวังว่าทุกอย่างจะชัดเจน ดังนั้นตอนนี้ฉันมีประเภท NPC และความสามารถของพวกเขา แต่ลองมาที่ด้านเทคนิค / โปรแกรมด้านเทคนิค สถาปัตยกรรมการเขียนโปรแกรมที่ดีสำหรับ NPC ชนิดต่าง ๆ ของฉันจะเป็นอย่างไร โอเคฉันสามารถมีคลาสพื้นฐานได้ จริงๆแล้วฉันคิดว่านี่เป็นวิธีที่ดีในการยึดมั่นในหลักการของDRY ดังนั้นฉันสามารถมีวิธีการเหมือนWalkTo(x,y)ในคลาสพื้นฐานของฉันเนื่องจาก NPC ทุกคนจะสามารถเคลื่อนไหวได้ แต่ตอนนี้มาถึงปัญหาที่แท้จริง ฉันจะใช้ความสามารถของฉันได้ที่ไหน …

2
เหตุใด F # Core จึงกำหนดประเภทอาร์เรย์ทั่วไป
ฉันเพิ่งสังเกตเห็นว่าเนมสเปซ FSharp.Core มีประเภทอาเรย์ทั่วไปที่มีขนาดสูงสุด 4 มิติคือCore [] <'T> , Core. [,] <' T> ฯลฯ C # และ VB ดูเหมือนจะทำได้ดี ด้วย System.Array - แม้ว่ามันจะไม่ชัดเจนสำหรับฉันว่าพวกเขาจัดการเพื่อสนับสนุนประเภทอาเรย์พิเศษที่พิมพ์อย่างรุนแรงเช่น int [], string [] ฉันเดาว่านี่เป็นคำถามสองข้อแล้ว: C # สนับสนุนประเภทอาเรย์พิเศษที่พิมพ์อย่างรุนแรงเช่น int [] โดยใช้ System.Array ที่ไม่ใช่แบบทั่วไปอย่างไร เนื่องจาก C # จัดการเพื่อทำสิ่งนี้เหตุใด F # จึงกำหนดประเภทอาร์เรย์ทั่วไป
11 c#  .net  f# 

2
IOC เวลารวบรวม
มีใครเริ่มโครงการที่จะทำ IOC ในเวลารวบรวม (อาจจะใช้ Roslyn หรือ Linq MethodInfo ปล่อย)? ประสบการณ์ของฉันกับคอนเทนเนอร์ของ IOC นั้นยอดเยี่ยมมากโดยมีปัญหาเล็ก ๆ น้อย ๆ คอนเทนเนอร์ IOC จำนวนมากเริ่มทำงานช้าลงเนื่องจากตรรกะการแก้ปัญหาส่วนใหญ่เกิดขึ้นที่นี่ บ่อยครั้งที่ยากที่จะตรวจสอบให้แน่ใจว่าการแก้ปัญหาเป็นไปได้เนื่องจากการรวบรวมไม่ทำให้แน่ใจได้ว่าตัวสร้างสามารถเรียกได้อีกต่อไป บ่อยครั้งที่คอนเทนเนอร์ของ IOC เพิ่มโอเวอร์เฮดขนาดเล็กให้กับรันไทม์ (บางอันไม่ได้เล็กแม้แต่บางอันที่เริ่มทำงานเร็วขึ้นอย่างรวดเร็ว) สำหรับฉันแล้วดูเหมือนว่าทางออกที่ดีที่สุดคือการเพิ่มขั้นตอนการคอมไพล์ให้กับ build chain ที่เพิ่มคลาส Factory แทน IOC มีใครทำแบบนี้มาก่อนหรือไม่ ถ้าไม่ทำไมล่ะ

2
แนวคิดและแนวปฏิบัติที่ดีที่สุดสำหรับคลาสและสมาชิกแบบคงที่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันอยากรู้มากเกี่ยวกับความคิดและแนวปฏิบัติที่ดีที่สุดในอุตสาหกรรมเกี่ยวกับสมาชิกแบบสแตติกหรือคลาสแบบคงที่ทั้งหมด มีข้อเสียหรือไม่หรือมีส่วนร่วมในรูปแบบการต่อต้านใด ๆ ฉันเห็นเอนทิตีเหล่านี้เป็น "คลาส / สมาชิกยูทิลิตี้" ในแง่ที่ว่าพวกเขาไม่ต้องการหรือต้องการอินสแตนซ์ชั้นเรียนเพื่อให้การทำงาน อะไรคือความคิดทั่วไปและแนวปฏิบัติที่ดีที่สุดในอุตสาหกรรมเกี่ยวกับเรื่องนี้ ดูตัวอย่างชั้นเรียนและสมาชิกด้านล่างเพื่อแสดงสิ่งที่ฉันกำลังอ้างอิง // non-static class with static members // public class Class1 { // ... other non-static members ... public static string GetSomeString() { // do something } } // static class // public static …
11 c#  class-design 

2
การผสมวิธีการซิงค์และ async มีประสิทธิภาพภายในวิธีการเดียวหรือไม่
โอเคฟังดูแปลก แต่รหัสนั้นง่ายมากและอธิบายสถานการณ์ได้ดี public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role) { AssertNotDisposed(); var roles = await GetRolesForUser(user); roles.Roles = RemoveRoles(roles.Roles, role); await Run(TableOperation.Replace(roles)); } (ฉันรู้ว่าฉันกำลังพูดถึงในบทคัดย่อด้านล่าง แต่ข้างต้นเป็นวิธีการที่เกิดขึ้นจริงจากสิ่งที่จะเป็นรหัสการผลิตจริงที่ทำในสิ่งที่ฉันถามเกี่ยวกับที่นี่และฉันสนใจในการตรวจสอบจริงของคุณ เพื่อความถูกต้องโปรดดูรูปแบบ async / await) ฉันพบรูปแบบนี้บ่อยขึ้นเรื่อย ๆ ในขณะที่ฉันกำลังใช้async/ awaitมากกว่า รูปแบบประกอบด้วยห่วงโซ่ของเหตุการณ์ต่อไปนี้: รอสายแรกที่ทำให้ฉันได้รับข้อมูลบางอย่างที่ฉันต้องทำ ทำงานกับข้อมูลนั้นพร้อมกัน รอสายสุดท้ายที่บันทึกงานที่อัปเดต โดยทั่วไปโค้ดบล็อกด้านบนเป็นวิธีที่ฉันใช้จัดการวิธีการเหล่านี้ ฉันawaitโทรครั้งแรกซึ่งฉันต้องทำเพราะมันเป็นแบบอะซิงโครนัส ต่อไปฉันทำงานที่ฉันต้องทำซึ่งไม่ใช่ IO หรือทรัพยากรถูกผูกไว้และไม่ใช่ async สุดท้ายผมบันทึกการทำงานของฉันซึ่งยังเป็นผู้asyncโทรเข้าและออกของสินค้าลัทธิผมawaitมัน แต่นี่เป็นวิธีที่มีประสิทธิภาพ / ถูกที่สุดในการจัดการรูปแบบนี้หรือไม่? ดูเหมือนว่าฉันจะสามารถข้ามawaitสายสุดท้ายได้ แต่จะเกิดอะไรขึ้นถ้ามันล้มเหลว …

1
MVC + 3 ชั้น ที่ ViewModels เข้ามาเล่น?
ฉันออกแบบแอพพลิเคชั่น 3 ชั้นโดยใช้ ASP.NET MVC 4 ฉันใช้ทรัพยากรต่อไปนี้เป็นข้อมูลอ้างอิง CodeProject: MVC + N-tier + Entity Framework แยกการเข้าถึงข้อมูลใน ASP.NET MVC ฉันมีดีไซน์ดังต่อไปนี้ Presentation Layer (PL) (โครงการ MVC หลักที่MของMVCถูกย้ายไปยัง Data Access Layer): MyProjectName.Main Views/ Controllers/ ... ชั้นตรรกะทางธุรกิจ (BLL) : MyProjectName.BLL ViewModels/ ProjectServices/ ... ชั้นการเข้าถึงข้อมูล (DAL) : MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... ตอนนี้ PL อ้างอิง BLL …

1
ทำไมคำหลักที่ให้ผลตอบแทนถูกนำมาใช้ร่วมกับผลตอบแทนและการทำลายไม่ใช่ด้วยตัวเอง?
ใน C # คุณสามารถสร้างวิธีการที่มีประเภทผลตอบแทนIEnumerable<T>และการใช้yield returnและyield breakเพื่อควบคุมการไหล นี่คือตัวอย่างง่ายๆที่ใช้ตัวควบคุมทั้งสอง: public IEnumerable<int> GetEvens(int start, int end) { if(end < start) yield break; if(start & 2 != 0) start++; for(int i = start; i <= end; i+=2) { yield return i; } } คำถามของฉันคือทำไมมันถูกออกแบบมาเพื่อใช้คำหลักสองคำด้วยกันyieldและไม่ได้ใช้มันเหมือนดังต่อไปนี้ด้วยคำเดียวyield"ที่ให้ค่าตอบแทน": public IEnumerable<int> GetEvens(int start, int end) { if(end < start) …
11 c# 

1
เป็นรหัสแรกที่มีการโยกย้ายหรือเครื่องมือข้อมูลเซิร์ฟเวอร์ SQL เหมาะสมกว่าหรือไม่
ฉันได้รับสเป็คเพื่อสร้างเว็บไซต์ MVC4 ใหม่มันจะไม่ใหญ่เกินไปในตอนแรก แต่ฉันคิดว่ามันจะเติบโตขึ้นเมื่อธุรกิจได้รับแนวคิดใหม่ ๆ การใช้. NET 4.5 ASP.NET MVC4 และ EF ฉันต้องเลือกระหว่างโค้ดก่อนด้วยการโยกย้ายหรือ Sql Server Data Tools (SSDT) ​​สำหรับการจัดการฐานข้อมูลของฉัน ด้วย SSDT ฉันสามารถควบคุมฐานข้อมูลของฉันในโครงการซึ่งเป็นส่วนหนึ่งของโซลูชันของฉันและจัดการการเปลี่ยนแปลงทุกอย่างตั้งแต่การพัฒนาไปจนถึงการผลิตและอื่น ๆ โดยใช้ไฟล์ dacpac ประสบการณ์ของฉันเกี่ยวกับโค้ดแรกจาก MVC3 ไม่ได้ใช้เกินกว่าการพัฒนาเนื่องจากตัวเลือกฐานข้อมูลที่ จำกัด มันจะจบลงด้วยการวาง Db ลงบนการเปลี่ยนแปลงรูปแบบหรือจัดการกับการเปลี่ยนแปลง Db ด้วยตนเอง อย่างไรก็ตามฉันถูกชักจูงให้เชื่อกับการโยกย้าย MVC4 ซึ่งไม่เป็นเช่นนั้นอีกต่อไปและตอนนี้ฉันสามารถผลักดันการอัปเดตไปยัง Db ได้แล้ว ดังนั้นคำถามของฉันคือแบบใดที่มีประสิทธิภาพมากที่สุดในการใช้โดยอิงจากการประหยัดเวลา / ความพยายามในการพัฒนา แต่ยังสามารถปรับขนาดได้และสามารถจัดการกับการเปลี่ยนแปลงการผลิตได้ ฉันชอบโค้ดก่อนและความสามารถในการสร้างฐานข้อมูลของฉันจากแบบจำลองตอนนี้การแนะนำการย้ายข้อมูลทำให้สามารถใช้งานได้จริงหรือไม่?

3
ทำไมเราไม่นำหน้า Enums, คลาส Abstract และ Structs?
ชุมชน C # ได้ใช้คำนำหน้า "I" อย่างแพร่หลายเพื่อแสดงถึงอินเทอร์เฟซที่แม้แต่โปรแกรมเมอร์ที่ไม่มีประสบการณ์มากที่สุดก็รู้ที่จะใช้ แล้วทำไมเราถึงไม่ใส่คำนำหน้า enums, คลาส abstract หรือ structs (อาจเป็น "E", "A" และ "S" ตามลำดับ)? ตัวอย่างเช่นถ้าเราทำเครื่องหมายคลาสนามธรรมทั้งหมดด้วย "A" มันจะให้ข้อมูลที่มีค่าเกี่ยวกับประเภทนั้นซึ่งในขณะที่มันสามารถอนุมานได้ก็ไม่ชัดเจนทันที โปรดทราบว่าฉันไม่ได้สนับสนุนการเปลี่ยนแปลงนี้ฉันแค่พยายามเข้าใจว่าทำไมเราไม่ทำสิ่งนี้ กระทู้นี้ตอบว่าทำไมเราถึงใช้คำนำหน้า "ฉัน" แต่ไม่ตอบว่าทำไมเราไม่ใช้คำนำหน้าอื่น ๆ

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