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

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

2
ฉันควรเปิดเผยค่า“ คำนวณ” เป็นคุณสมบัติหรือวิธีการหรือไม่?
ฉันมีคลาส C # ที่แสดงประเภทเนื้อหาในระบบการจัดการเนื้อหาเว็บ เรามีฟิลด์ที่อนุญาตให้แก้ไขเนื้อหาเว็บเพื่อป้อนเทมเพลต HTML สำหรับวิธีการแสดงวัตถุ โดยพื้นฐานแล้วมันใช้ไวยากรณ์แฮนด์บาร์สำหรับการแทนที่ค่าคุณสมบัติวัตถุลงในสตริง HTML: <h1>{{Title}}</h1><p>{{Message}}</p> จากมุมมองการออกแบบคลาสฉันควรแสดงสตริง HTML ที่จัดรูปแบบ (พร้อมการแทนที่) เป็นคุณสมบัติหรือวิธีการหรือไม่ ตัวอย่างเช่นคุณสมบัติ: public class Example { private string _template; public string Title { get; set; } public string Message { get; set; } public string Html { get { return this.ToHtml(); } protected set { } …

2
เหตุใดจึงต้องแยกชั้นเรียน CommandHandler พร้อมหมายเลขอ้างอิง () แทนวิธีการจัดการใน Command เอง
ฉันมีส่วนหนึ่งของรูปแบบ CQRS ที่นำมาใช้โดยใช้สถาปัตยกรรม S # arpดังนี้: public class MyCommand { public CustomerId { get; set; } // some other fields } public class MyCommandHandler<MyCommand> : ICommandHandler<MyCommand, CommandResult> { Handle(MyCommand command) { // some code for saving Customer entity return CommandResult.Success; } } ฉันสงสัยว่าทำไมไม่เพียงแค่มีคลาสCommandที่มีทั้งข้อมูลและวิธีการจัดการ? มันเป็นข้อดีของการทดสอบที่คุณต้องทดสอบตรรกะการจัดการคำสั่งแยกต่างหากจากคุณสมบัติคำสั่งหรือไม่? หรือมันเป็นบางอย่างที่ต้องการทางธุรกิจบ่อยครั้งที่คุณจำเป็นต้องมีคำสั่งอย่างใดอย่างหนึ่งจัดการโดยการใช้งานที่แตกต่างกันของICommandHandler<MyCommand, CommandResult>?

4
วิธีใดที่จะยุติการอ่านลูปเป็นวิธีที่ต้องการ
เมื่อคุณต้องย้ำผู้อ่านที่ไม่ทราบจำนวนรายการที่จะอ่านและวิธีเดียวที่จะทำคือการอ่านต่อไปจนกว่าจะถึงจุดสิ้นสุด นี่เป็นสถานที่ที่คุณต้องการวนซ้ำไม่รู้จบ มีเสมอtrueที่ระบุว่าจะต้องมีbreakหรือreturnคำสั่งบางแห่งในบล็อก int offset = 0; while(true) { Record r = Read(offset); if(r == null) { break; } // do work offset++; } มีวิธีอ่านลูปสองครั้ง Record r = Read(0); for(int offset = 0; r != null; offset++) { r = Read(offset); if(r != null) { // do work } } …

2
ติดตั้งคลาส Haskell ด้วยอินเตอร์เฟส C #
ฉันพยายามที่จะเปรียบเทียบคลาสประเภทของ Haskell และอินเทอร์เฟซของ C # Functorสมมติว่ามี Haskell: class Functor f where fmap :: (a -> b) -> f a -> f b วิธีการใช้คลาสประเภทนี้เป็นอินเตอร์เฟซใน C #? สิ่งที่ฉันได้ลอง: interface Functor<A, B> { F<B> fmap(Func<A, B> f, F<A> x); } นี้คือการดำเนินการที่ไม่ถูกต้องและฉัน stucked จริงกับทั่วไปประเภทที่ควรจะส่งกลับโดยF fmapควรกำหนดไว้อย่างไรและที่ไหน? มันเป็นไปไม่ได้ที่จะใช้Functorใน C # และทำไม? หรืออาจมีแนวทางอื่น
13 c#  haskell 

4
linq มีประสิทธิภาพมากกว่าที่ปรากฏบนพื้นผิวหรือไม่?
ถ้าฉันเขียนอะไรแบบนี้: var things = mythings .Where(x => x.IsSomeValue) .Where(y => y.IsSomeOtherValue) นี่เป็นเช่นเดียวกับ: var results1 = new List<Thing>(); foreach(var t in mythings) if(t.IsSomeValue) results1.Add(t); var results2 = new List<Thing>(); foreach(var t in results1) if(t.IsSomeOtherValue) results2.Add(t); หรือมีเวทมนตร์ใต้ฝาครอบที่ใช้งานได้มากกว่านี้: var results = new List<Thing>(); foreach(var t in mythings) if(t.IsSomeValue && t.IsSomeOtherValue) results.Add(t); หรือเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงโดยสิ้นเชิง?
13 c#  linq 

1
เหตุใด Resharper จึงชอบ“ ตาม” กับ“ เป็น”?
เมื่อฉันเขียนรหัสเช่นนี้โดยที่ obj เป็นตัวแปรท้องถิ่น: if (obj is IMyInterface) { var result = (IMyInterface)obj; // .... } Resharper เสนอให้เปลี่ยนเป็นรหัสดังนี้: var result = obj as IMyInterface; if (result != null) { // ... } ฉันชอบแบบเก่าเนื่องจากไม่มีข้อยกเว้นสำหรับการอ้างอิงเป็นโมฆะโดยไม่ได้ตั้งใจ เหตุผลอะไรที่ทำให้เลือกรูปแบบอื่น? ทำไม Resharper จึงแนะนำสิ่งนี้
13 c#  resharper 

2
C ++ มีวิธีจัดการหลายมรดกด้วยบรรพบุรุษร่วมกันอย่างไร
ฉันไม่ใช่คน C ++ แต่ฉันถูกบังคับให้คิดเกี่ยวกับเรื่องนี้ เหตุใดจึงมีการสืบทอดหลายรายการใน C ++ แต่ไม่ใช่ใน C # (ฉันรู้ปัญหาเพชรแต่นั่นไม่ใช่สิ่งที่ฉันถามที่นี่) C ++ แก้ไขความคลุมเครือของลายเซ็นวิธีที่เหมือนกันซึ่งสืบทอดมาจากคลาสพื้นฐานหลายคลาสได้อย่างไร และทำไมการออกแบบเดียวกันไม่รวมอยู่ใน C #

2
วิธีที่ดีที่สุดสำหรับความคิดเห็นโค้ดอินไลน์คืออะไร
เรากำลังทำการปรับเปลี่ยนบางอย่างให้เป็น codebase เก่าแก่อายุ 20 ปีและฉันกำลังพูดคุยกับเพื่อนร่วมงานของฉันเกี่ยวกับรูปแบบความคิดเห็นในรหัส (plsql, java) ไม่มีรูปแบบเริ่มต้นสำหรับความคิดเห็น แต่ในกรณีส่วนใหญ่คนทำสิ่งนี้ในความคิดเห็น: // date (year, year-month, yyyy-mm-dd, dd/mm/yyyy), (author id, author name, author nickname) and comment รูปแบบที่เสนอสำหรับความคิดเห็นในอนาคตและในอดีตที่ฉันต้องการคือ: // {yyyy-mm-dd}, unique_author_company_id, comment เพื่อนร่วมงานของฉันบอกว่าเราต้องการเพียงความคิดเห็นเท่านั้นและต้องจัดรูปแบบความคิดเห็นทั้งในอดีตและอนาคตในรูปแบบนี้: // comment ข้อโต้แย้งของฉัน: ฉันพูดด้วยเหตุผลด้านการบำรุงรักษาสิ่งสำคัญคือต้องรู้ว่าเมื่อใดและใครทำการเปลี่ยนแปลง (แม้ข้อมูลนี้จะอยู่ใน SCM) รหัสกำลังมีชีวิตอยู่และด้วยเหตุนี้จึงมีประวัติ เนื่องจากไม่มีการเปลี่ยนแปลงวันที่มันเป็นไปไม่ได้ที่จะรู้ว่าเมื่อใดที่มีการเปลี่ยนแปลงเกิดขึ้นโดยไม่เปิดเครื่องมือ SCM และค้นหาในประวัติวัตถุที่ยาวนาน เนื่องจากผู้เขียนมีความสำคัญมากการเปลี่ยนแปลงของผู้เขียนมีความน่าเชื่อถือมากกว่าการเปลี่ยนแปลงของ authory เหตุผลความว่องไวไม่จำเป็นต้องเปิดและนำทางผ่านเครื่องมือ SCM ผู้คนจะกลัวที่จะเปลี่ยนบางสิ่งที่บางคนทำเมื่อ 15 ปีที่แล้วมากกว่าสิ่งที่เพิ่งถูกสร้างหรือเปลี่ยนแปลง เป็นต้น ข้อโต้แย้งของเพื่อนร่วมงานของฉัน: ประวัติอยู่ใน SCM …

4
อินเทอร์เฟซควรขยาย (และในการทำสืบทอดวิธีของ) อินเทอร์เฟซอื่น ๆ
แม้ว่านี่จะเป็นคำถามทั่วไป แต่ก็เป็นปัญหาเฉพาะที่ฉันกำลังประสบอยู่ ขณะนี้ฉันมีส่วนต่อประสานที่ระบุในโซลูชันของฉันที่เรียกว่า public interface IContextProvider { IDataContext { get; set; } IAreaContext { get; set; } } อินเทอร์เฟซนี้มักใช้ตลอดโปรแกรมและด้วยเหตุนี้ฉันจึงเข้าถึงวัตถุที่ต้องการได้ง่าย อย่างไรก็ตามในส่วนของโปรแกรมของฉันค่อนข้างต่ำฉันต้องการเข้าถึงคลาสอื่นที่จะใช้IAreaContextและดำเนินการบางอย่างกับมัน ดังนั้นฉันจึงสร้างส่วนต่อประสานจากโรงงานอีกอันเพื่อสร้างสิ่งนี้ที่เรียกว่า: public interface IEventContextFactory { IEventContext CreateEventContext(int eventId); } ฉันมีคลาสที่ใช้IContextProviderและฉีดโดยใช้ NinJect ปัญหาที่ฉันมีคือพื้นที่ที่ฉันต้องการใช้IEventContextFactoryนี้มีการเข้าถึงIContextProviderเท่านั้นและตัวเองใช้คลาสอื่นซึ่งจะต้องใช้อินเทอร์เฟซใหม่นี้ ฉันไม่ต้องการให้อินสแตนซ์ของการใช้งานIEventContextFactoryในระดับต่ำและต้องการทำงานกับอินเตอร์เฟสIEventContextFactoryตลอด อย่างไรก็ตามฉันยังไม่ต้องการที่จะฉีดพารามิเตอร์อื่นผ่านตัวสร้างเพียงเพื่อให้มันผ่านไปยังชั้นเรียนที่ต้องการมันคือ // example of problem public class MyClass { public MyClass(IContextProvider context, IEventContextFactory event) { _context = …
13 c#  design  interfaces 

6
พฤติกรรมที่คาดหวังเมื่อมีการร้องขอสำหรับคอลเลกชันจะมีรายการศูนย์
สมมติว่าคุณได้รับสิ่งต่อไปนี้ ... List<Thing> theThings = fubar.Things.All(); หากไม่มีอะไรจะกลับคุณจะคาดหวังอะไรกับสิ่งเหล่านี้ทั้งหมด () จะกลับมา? แก้ไข: ขอบคุณสำหรับความคิดเห็น ฉันจะรอนิดหน่อยและยอมรับผลงานที่มีจำนวนมากที่สุด ฉันเห็นด้วยกับการตอบสนองโดยเฉพาะอย่างยิ่งผู้ที่แนะนำการเก็บสะสมที่ว่างเปล่า ผู้ขายระบุ API ด้วยการโทรหลายครั้งคล้ายกับตัวอย่างด้านบน ผู้ขายที่ทำรายได้ 4.6 ล้านเหรียญสหรัฐผ่านทาง API ของพวกเขาเมื่อปีที่แล้วคือ BTW พวกเขาทำสิ่งที่ฉันไม่เห็นด้วยโดยพื้นฐาน - พวกเขามีข้อยกเว้น
13 java  c# 

3
ฉันจะทดสอบเสียงได้อย่างไร
ฉันได้สืบทอดโครงการขนาดเล็กและต้องการขยายและทำให้เสถียรในเวลาเดียวกันโดยการเขียนการทดสอบหน่วยสำหรับรหัสใหม่ทั้งหมดที่ฉันเพิ่ม ชั้นแรกTypedAudioCreator, สร้างไฟล์เสียงและสิ่งนี้กลายเป็นเรื่องง่ายมากที่จะทดสอบก่อนและเขียนรหัสเป็นครั้งที่สอง อย่างไรก็ตามเมื่อถึงเวลาเขียนTypedAudioPlayerฉันไม่รู้ว่าจะทดสอบมันยังไง เป็นชั้นเรียนขนาดเล็กมากที่มุ่งเน้นไปที่พื้นฐานการเล่นเสียง: public class TypedAudioFilePlayer { public event StartedPlayingHandler StartedPlaying; public event StoppedPlayingHandler StoppedPlaying; public readonly int TimeBetweenPlays; private Queue<TypedAudioFile> _playlist = new Queue<TypedAudioFile>(); public TypedAudioFilePlayer(int timeBetweenPlays) { TimeBetweenPlays = timeBetweenPlays; } public void AddFile(TypedAudioFile file) { _playlist.Enqueue(file); } public void StartPlaying() { ThreadPool.QueueUserWorkItem(ignoredState => { while …
13 c#  tdd 

7
ประสบการณ์ C # แปลได้ดีในภาษา C ++ หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ชั้นเรียนการเขียนโปรแกรมในโรงเรียนของฉันคือ C ++ แต่ฉันลงเอยด้วยการทำงานที่ทำ C # ในช่วงไม่กี่ปีที่ผ่านมา หากมีตำแหน่งที่ต้องการประสบการณ์ 1 หรือ 2 ปีใน C ++ ประสบการณ์ของฉันใน C # จะคุ้มค่าที่จะพิจารณาหรือไม่? ฉันจะมีประสิทธิภาพแค่ไหนในฐานะเช่นนี้? ดังนั้นฉันต้องเริ่มต้นในฐานะโปรแกรมเมอร์ระดับ C ++ เพื่อรับประสบการณ์ที่จำเป็นหรือไม่?
13 c#  c++  experience 

3
ฉันควรรวมอะไรไว้ในความคิดเห็นเอกสาร XML
ฉันพยายามทำให้จุดรหัสของฉันดีขึ้นโดยเฉพาะอย่างยิ่งเมื่อมันมาถึงความเห็น XML ในสมาชิกชั้นเรียน แต่บ่อยครั้งที่มันรู้สึกโง่ ในกรณีของตัวจัดการเหตุการณ์การตั้งชื่อและพารามิเตอร์เป็นมาตรฐานและชัดเจน: /// <summary> /// Handler for myCollection's CollectionChanged Event. /// </summary> /// <param name="sender">Event Sender</param> /// <param name="e">Event Arguments</param> private void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { // actual code here... } ฉันมักจะมีคุณสมบัติง่าย ๆ ที่มีชื่อ (IMO) อย่างชัดเจนเพื่อให้การสรุปซ้ำซ้อน: /// <summary> /// Indicates if an item is selected. /// …
13 c#  coding-style 

2
ทำไมรูปแบบพื้นที่เก็บข้อมูลจำเป็นใน NHibernate?
ฉันอ่านอย่างเป็นทางการของแอพลิเคชัน NHibernate ตามแรกของคุณ ในขณะที่การสอนนั้นดีและง่ายต่อการติดตามฉันสงสัยว่าทำไมรูปแบบ Repository จึงถูกใช้ ในต่างๆAdd, Update, RemoveวิธีการในProductRepositoryการดำเนินงานรหัสเกือบจะเหมือนกับ - พวกเขาทั้งหมดใช้การทำธุรกรรมและความแตกต่างที่อยู่ใน "เนื้อ" คือโทรsession.Saveint Addวิธีการsession.Deleteในremoveวิธีการ ( หน้าขาดเบรก HTML, แต่คุณสามารถค้นหาหน้าสำหรับรหัสที่เกี่ยวข้องเช่นpublic void Remove,public void Add ) รหัสนั้น "รู้สึกผิด" เหตุใดผู้เขียนจึงใช้รูปแบบ Repository - เป็นเพียงการสาธิตการใช้ NHibernate หรือว่าจำเป็นหรือเหตุผลอื่น ๆ ps พื้นหลังของฉันมาจาก Ruby on Rails โดยใช้ ActiveRecord ดังนั้นฉันจึงพยายามเข้าใจว่า NHibernate ทำงานอย่างไร / ใช้งานอย่างไร
13 c#  .net  nhibernate 

4
มันเป็น "รูปแบบกลิ่น" ที่จะนำตัวแบบเช่น "FullName" หรือ "FormattedPhoneNumber" ในรุ่นของคุณหรือไม่?
ฉันกำลังทำงานกับแอพ ASP.NET MVC และฉันเริ่มติดนิสัยในการวางสิ่งที่ดูเหมือนว่า getters ที่เป็นประโยชน์และสะดวกในคลาส / โมเดลเอนทิตีของฉัน ตัวอย่างเช่น: public class Member { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string PhoneNumber { get; set; } public string FullName { get { return FirstName + …

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