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

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

3
เหตุผลเบื้องหลังการใช้งาน C # String.Split () ที่ไม่เข้าใจง่าย
ใน C # ถ้าฉันต้องการแยก a stringอีกอันstringฉันต้องทำสิ่งนั้น: testString.Split(new string[] { "anotherString" }, StringSplitOptions.None); จากString.Splitเอกสาร MSDN ที่มีการโอเวอร์โหลดเราสามารถเห็นการใช้งานและสาเหตุที่ต้องทำการโทร มาจากPythonมันยากสำหรับฉันที่จะเข้าใจอย่างถูกต้องว่าทำไมจึงต้องมีการโทร ฉันหมายความว่าฉันสามารถใช้Regex.Splitเพื่อให้ได้ไวยากรณ์ที่คล้ายกันมากกว่าการดำเนินการของงูใหญ่ แต่ผมจะต้องทำมันที่ค่าใช้จ่ายของประสิทธิภาพการทำงานน้อยกว่า (เวลาการติดตั้ง) สำหรับอะไรที่เรียบง่าย โดยพื้นฐานแล้วคำถามของฉันคือทำไมเราทำไม่ได้: testString.Split("anotherString"); โปรดทราบว่าฉันไม่ได้แนะนำต้นแบบหรือการนำไปใช้ใด ๆ ฉันเข้าใจว่าทำไมคุณไม่สามารถใช้เวอร์ชันด้านบนเนื่องจาก API ปัจจุบัน เป้าหมายของฉันคือเข้าใจว่าทำไม API ดังกล่าวจึงถูกสร้างขึ้นโดยคำนึงถึงประโยชน์ที่ไวยากรณ์ข้างต้นนำมา ณ ตอนนี้ความยืดหยุ่นดูเหมือนจะเป็นเป้าหมายของกระแสString.Splitที่เข้าท่า แต่ตามจริงแล้วฉันคิดว่าจริงๆแล้วมีการแสดงบางอย่างที่ได้รับบ้าง ฉันเดาว่าฉันผิด

3
เป็นวิธีปฏิบัติที่ดีที่จะรวมชุดของคุณสมบัติที่เกี่ยวข้องไว้ในโครงสร้าง / คลาสของตัวเองหรือไม่?
การเขียนวัตถุผู้ใช้ในสวิฟท์ แต่คำถามของฉันเกี่ยวข้องกับภาษาที่พิมพ์ออกมาอย่างรุนแรง ผู้ใช้สามารถมีลิงก์จำนวนมาก (FacebookProfile, InstagramProfile, ฯลฯ ) คำถามสองสามข้อเกี่ยวกับเรื่องนี้ เป็นการดีที่จะรวมลิงก์ในวัตถุของตนเองหรือไม่? struct ผู้ใช้ { var firstName: string var lastName: string อีเมล var: สตริง ลิงก์ var: ลิงค์ } ลิงค์โครงสร้าง { var facebook: string var instagram: string var twitter: string } หรือพวกเขาควรจะหลวม? ฉันรู้ว่าทั้งสองวิธีใช้เทคนิคดี แต่สงสัยว่ามีวิธีแนะนำโดยทั่วไปหรือไม่โดยเฉพาะอย่างยิ่งสำหรับการอ่าน struct User { var firstName: string var lastName: string var …

2
จะเกิดอะไรขึ้นเมื่อเธรดรองานในขณะที่ลูป?
หลังจากจัดการกับรูปแบบ async / คอยรูปของ C # ในขณะนี้ฉันก็ตระหนักว่าฉันไม่รู้วิธีอธิบายสิ่งที่เกิดขึ้นในรหัสต่อไปนี้: async void MyThread() { while (!_quit) { await GetWorkAsync(); } } GetWorkAsync()จะถือว่าคืนค่าTaskที่ไม่สามารถรอได้ซึ่งอาจหรือไม่อาจทำให้เกิดการสลับเธรดเมื่อดำเนินการต่อเนื่อง ฉันจะไม่สับสนถ้าการรอไม่ได้อยู่ในวง ฉันคาดหวังว่าส่วนที่เหลือของวิธี (เช่นความต่อเนื่อง) อาจจะดำเนินการในหัวข้ออื่นซึ่งเป็นเรื่องปกติ อย่างไรก็ตามในวงแนวคิดของ "ส่วนที่เหลือของวิธีการ" ทำให้ฉันมีหมอกเล็กน้อย จะเกิดอะไรขึ้นกับ "ส่วนที่เหลือของลูป" หากเธรดเปิดอยู่ต่อเนื่องกับหากไม่เปลี่ยน เธรดใดที่วนซ้ำครั้งถัดไปของลูปที่เรียกใช้งาน การสังเกตของฉันแสดง (ไม่ได้รับการตรวจสอบอย่างแน่ชัด) ว่าการวนซ้ำแต่ละครั้งเริ่มต้นในเธรดเดียวกัน (ฉบับดั้งเดิม) ในขณะที่การดำเนินการต่อเนื่องจะดำเนินการอีกครั้ง สิ่งนี้เป็นจริงได้ไหม ถ้าใช่นี่คือระดับของการขนานที่ไม่คาดคิดซึ่งจำเป็นต้องคำนึงถึงความปลอดภัยของเธรดแบบ vis-a-vis ของเมธอด GetWorkAsync หรือไม่? UPDATE: คำถามของฉันไม่เหมือนกันตามที่แนะนำโดยบางคน while (!_quit) { ... }รูปแบบรหัสเป็นเพียงความเรียบง่ายของรหัสที่เกิดขึ้นจริงของฉัน ในความเป็นจริงเธรดของฉันคือวนรอบที่ยาวนานซึ่งประมวลผลคิวอินพุตของไอเท็มงานในช่วงเวลาปกติ (ทุกๆ …
10 c#  loops  async 

2
ทำไมคำสั่ง“ ใช้” และคำสั่ง“ ใช้” ใช้คำหลักเดียวกันใน C #
usingสั่งให้เราสามารถเข้าถึงประเภทโดยไม่ต้องใช้ชื่อที่มีคุณสมบัติครบถ้วนของพวกเขา using MyNamespace.Foo.Bar; usingงบทำหน้าที่เป็นน้ำตาลประโยคสำหรับtry/ finallyบล็อกซึ่งมั่นใจว่าวัตถุที่มีการกำจัดอย่างถูกต้อง using(var x = new MyDisposableClass()) { ... } สถานการณ์ทั้งสองนี้ดูเหมือนจะไม่มีอะไรเกี่ยวข้องกัน เพราะเหตุใดพวกเขาจึงใช้คำหลักเดียวกัน ฉันสงสัยว่าทุกคนจะสับสนทั้งสองกรณี แต่ดูเหมือนแปลกที่จะไม่สร้างคำศัพท์ใหม่สำหรับฟังก์ชั่นใหม่ นอกจากนี้ฉันได้อ่านเกี่ยวกับการใช้สองครั้งclassใน C ++ เช่นกัน (อันหนึ่งสำหรับการประกาศคลาส, หนึ่งสำหรับการกำหนดพารามิเตอร์เทมเพลต) แต่ในที่สุดกรณีที่สองมีคำสำคัญของตัวเองtypenameซึ่งทำให้ฉันมีเหตุผลมากขึ้น
10 c#  statement 

2
การสร้างคลาสที่มีวัตถุประสงค์เพื่อแปลงเป็นคลาสอื่นโดยปริยายหรือไม่?
ลองนึกภาพสถานการณ์ที่เรากำลังใช้ห้องสมุดที่อนุญาตให้คุณสร้างCircleวัตถุที่คุณสามารถระบุรัศมีและศูนย์กลางของวงกลมเพื่อกำหนด อย่างไรก็ตามด้วยเหตุผลบางอย่างมันยังใช้flavourพารามิเตอร์ที่จำเป็น ตอนนี้สมมติว่าฉันจำเป็นต้องใช้Circleในแอพของฉันเอง แต่สำหรับวัตถุประสงค์ของแอพของฉันฉันสามารถกำหนดรสชาติให้เป็นFlavours.Cardboardทุกครั้ง ในการ "แก้ปัญหา" สิ่งนี้ฉันสร้างCircleคลาสของตัวเองในเนมสเปซที่ต่างกันซึ่งใช้radiusและcenterเป็นพารามิเตอร์เท่านั้น แต่มีตัวแปลงโดยนัยไปยังCircleคลาสของไลบรารีภายนอกซึ่งเพิ่งสร้างCircle(this.radius, this.center, Flavours.Cardboard)วัตถุ ดังนั้นทุกที่ที่ฉันต้องการประเภทอื่นCircleฉันจะให้การแปลงอัตโนมัติเกิดขึ้น อะไรคือผลของการสร้างชั้นเรียนดังกล่าว? มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? มันจะสร้างความแตกต่างหรือไม่ถ้าแอปพลิเคชันของฉันเป็น API ที่สร้างอยู่บนห้องสมุดภายนอกนี้มีไว้สำหรับใช้งานโดยโปรแกรมเมอร์อื่น ๆ ?

3
การใช้อินเทอร์เฟซสำหรับรหัสคู่ที่หลวม
พื้นหลัง ฉันมีโครงการที่ขึ้นอยู่กับการใช้งานของอุปกรณ์ฮาร์ดแวร์บางประเภทในขณะที่มันไม่สำคัญว่าใครจะทำอุปกรณ์ฮาร์ดแวร์นั้นตราบเท่าที่มันเป็นสิ่งที่ฉันต้องทำ จากที่กล่าวมาแม้กระทั่งอุปกรณ์สองชิ้นที่ควรทำในสิ่งเดียวกันจะมีความแตกต่างเมื่อไม่ได้ผลิตโดยผู้ผลิตรายเดียวกัน ดังนั้นฉันจึงคิดว่าจะใช้อินเทอร์เฟซเพื่อแยกแอปพลิเคชันออกจากอุปกรณ์/ รุ่นที่เกี่ยวข้องและมีอินเทอร์เฟซที่ครอบคลุมฟังก์ชั่นระดับสูงสุดแทน นี่คือสิ่งที่ฉันคิดว่าสถาปัตยกรรมของฉันจะมีลักษณะ: กำหนดอินเตอร์เฟซใน C # IDeviceโครงการหนึ่ง มีรูปธรรมในห้องสมุดที่กำหนดไว้ในโครงการ C # อื่นที่จะใช้เพื่อเป็นตัวแทนของอุปกรณ์ มีอุปกรณ์ที่เป็นรูปธรรมใช้IDeviceอินเตอร์เฟซ IDeviceอินเตอร์เฟซที่อาจจะมีวิธีการเช่นหรือGetMeasurementSetRange ทำให้แอปพลิเคชันมีความรู้เกี่ยวกับรูปธรรมและส่งผ่านรูปธรรมไปยังรหัสแอปพลิเคชั่นที่ใช้งาน ( ไม่นำไปใช้ ) IDeviceอุปกรณ์ ฉันค่อนข้างแน่ใจว่านี่เป็นวิธีที่ถูกต้องที่จะไปเกี่ยวกับเรื่องนี้เพราะแล้วฉันจะสามารถเปลี่ยนอุปกรณ์ที่ใช้โดยไม่ส่งผลกระทบต่อแอปพลิเคชัน (ซึ่งดูเหมือนว่าจะเกิดขึ้นบางครั้ง) กล่าวอีกนัยหนึ่งมันไม่สำคัญว่าการใช้งานGetMeasurementหรือSetRangeทำงานผ่านคอนกรีตอย่างแท้จริง (อาจแตกต่างกันระหว่างผู้ผลิตอุปกรณ์) ข้อสงสัยเดียวในใจของฉันคือตอนนี้ทั้งแอปพลิเคชันและคลาสที่เป็นรูปธรรมของอุปกรณ์นั้นขึ้นอยู่กับไลบรารีที่มีIDeviceส่วนต่อประสาน แต่นั่นเป็นสิ่งที่ไม่ดี? ฉันไม่เห็นด้วยว่าแอปพลิเคชันไม่จำเป็นต้องรู้เกี่ยวกับอุปกรณ์ได้อย่างไรนอกจากอุปกรณ์และIDeviceอยู่ในเนมสเปซเดียวกัน คำถาม ดูเหมือนว่าวิธีการที่ถูกต้องสำหรับการใช้อินเทอร์เฟซเพื่อแยกการพึ่งพาระหว่างแอปพลิเคชันของฉันและอุปกรณ์ที่ใช้หรือไม่

3
Stubbing Properties พร้อมเซ็ตส่วนตัวสำหรับการทดสอบ
เรามีวัตถุ public class MyObject{ protected MyObject(){} public string Property1 {get;private set;} public string Property2 {get;private set;} public string Property3 {get;private set;} public string Property4 {get;private set;} public string Property5 {get;private set;} public string Property6 {get;private set;} public string Property7 {get;private set;} public string Property8 {get;private set;} public string Property9 {get;private …

1
วิธีหลีกเลี่ยงอินเตอร์เฟสแบบช่างพูด
พื้นหลัง: ฉันกำลังออกแบบแอปพลิเคชันเซิร์ฟเวอร์และสร้าง dll แยกต่างหากสำหรับระบบย่อยที่แตกต่างกัน เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นสมมติว่าฉันมีระบบย่อยสองระบบ: 1) Users2)Projects ส่วนต่อประสานสาธารณะของผู้ใช้มีวิธีการดังนี้: IEnumerable<User> GetUser(int id); และส่วนต่อประสานสาธารณะของโครงการมีวิธีการดังนี้: IEnumerable<User> GetProjectUsers(int projectId); ตัวอย่างเช่นเมื่อเราต้องการแสดงผู้ใช้สำหรับโครงการบางอย่างเราสามารถเรียกGetProjectUsersและจะให้วัตถุกลับมาพร้อมข้อมูลที่เพียงพอที่จะแสดงใน DataGrid หรือคล้ายกัน ปัญหา: ตามหลักแล้วProjectsระบบย่อยไม่ควรเก็บข้อมูลผู้ใช้และควรเก็บรหัสผู้ใช้ที่เข้าร่วมในโครงการ ในการให้บริการGetProjectUsersจำเป็นต้องมีการเรียกGetUserใช้Usersระบบสำหรับแต่ละ id ผู้ใช้ที่เก็บไว้ในฐานข้อมูลของตัวเอง อย่างไรก็ตามสิ่งนี้ต้องการการGetUserเรียกที่แยกจากกันจำนวนมากทำให้เกิดคิวรี่ SQL แยกต่างหากมากมายภายในUserระบบย่อย ฉันไม่ได้ทดสอบสิ่งนี้จริงๆ แต่การมีการออกแบบช่างพูดนี้จะส่งผลกระทบต่อความสามารถในการขยายระบบ ถ้าฉันแยกระบบย่อยออกจากกันฉันสามารถเก็บข้อมูลทั้งหมดไว้ใน schema เดียวที่สามารถเข้าถึงได้โดยทั้งสองระบบและProjectsสามารถทำได้เพียงJOINเพื่อให้ผู้ใช้โครงการทั้งหมดได้รับแบบสอบถามเดียว Projectsจะต้องรู้วิธีการสร้างUserวัตถุจากผลการสืบค้นด้วย แต่นี่เป็นการแยกการแยกซึ่งมีข้อดีหลายประการ คำถาม: ทุกคนสามารถแนะนำวิธีการแยกออกจากกันในขณะที่หลีกเลี่ยงการGetUserโทรบุคคลเหล่านี้ในระหว่างGetProjectUsersหรือไม่ ตัวอย่างเช่นสิ่งหนึ่งที่ฉันคิดว่าเป็นสำหรับผู้ใช้ในการให้ความสามารถแก่ระบบภายนอกในการ "แท็ก" ผู้ใช้ที่มีคู่ค่าป้ายกำกับและเพื่อขอผู้ใช้ด้วยค่าที่แน่นอนเช่น: void AddUserTag(int userId, string tag, string value); IEnumerable<User> GetUsersByTag(string tag, …

4
จงใจยกข้อยกเว้นเพื่อใช้ catch
สำหรับแบบทั่วไปที่if...elseมีการจัดการข้อยกเว้นบางอย่างเช่นตัวอย่างต่อไปนี้เป็นแนวทางปฏิบัติที่แนะนำเพื่อหลีกเลี่ยงการทำสำเนารหัสหรือไม่ try { if (GetDataFromServer()) { return ProcessData(); } else { throw new Exception(); } catch(Exception ex) { return null; } แทน... try { if (GetDataFromServer()) { return ProcessData(); } else { return null; } } catch(Exception ex) { return null; } ฉันรู้ว่ามีการแสดงเล็กน้อย แต่ฉันสงสัยว่านี่เป็นการปฏิบัติที่ยอมรับได้หรือไม่ ปัจจุบันฉันใช้วิธีที่สองโดยเฉพาะในกรณีที่ฉันต้องจัดการกับข้อยกเว้นที่แตกต่างกัน - แต่ฉันสงสัยว่าวิธีแรกนั้นเหมาะสมกับกรณีง่ายหรือไม่

7
เอนทิตีที่ซ้อนกันและการคำนวณเกี่ยวกับคุณสมบัติของเอนทิตีใบไม้ - วิธี SQL หรือ NoSQL
ฉันกำลังทำงานในโครงการงานอดิเรกที่เรียกว่าการจัดการเมนู / สูตร นี่คือลักษณะที่หน่วยงานของฉันและความสัมพันธ์ของพวกเขามีลักษณะ NutrientมีคุณสมบัติCodeและValue IngredientมีคอลเลกชันของNutrients A Recipeมีคอลเล็กชันIngredientsและบางครั้งสามารถมีคอลเล็กชันอื่นได้recipes A Mealได้รวบรวมRecipesและIngredients A Menuมีคอลเล็กชันของMeals ความสัมพันธ์สามารถอธิบายได้ว่า ในหน้าใดหน้าหนึ่งสำหรับเมนูที่เลือกฉันจำเป็นต้องแสดงข้อมูลสารอาหารที่มีประสิทธิภาพซึ่งคำนวณจากส่วนประกอบ (อาหารสูตรอาหารส่วนผสมและสารอาหารที่เกี่ยวข้อง) ณ ตอนนี้ฉันกำลังใช้ SQL Server เพื่อจัดเก็บข้อมูลและฉันกำลังนำทางลูกโซ่จากรหัส C # ของฉันเริ่มจากอาหารแต่ละมื้อของเมนูแล้วรวบรวมค่าสารอาหาร ฉันคิดว่านี่ไม่ใช่วิธีที่มีประสิทธิภาพเนื่องจากการคำนวณนี้กำลังทำทุกครั้งที่มีการร้องขอหน้าเว็บและมีการเปลี่ยนแปลงองค์ประกอบในบางครั้ง ฉันคิดเกี่ยวกับการให้บริการพื้นหลังที่รักษาตารางที่เรียกว่า MenuNutrients ( {MenuId, NutrientId, Value}) และจะเติม / อัปเดตตารางนี้ด้วยสารอาหารที่มีประสิทธิภาพเมื่อมีองค์ประกอบใด ๆ (Meal, Recipe, Ingredient) เปลี่ยนแปลง ฉันรู้สึกว่า GraphDB เหมาะสำหรับความต้องการนี้ แต่การได้รับ NoSQL ของฉันมี จำกัด ฉันต้องการที่จะรู้ว่าสิ่งที่เป็นทางเลือกวิธีการแก้ปัญหา / แนวทางในการแสดงสารอาหารของเมนูที่กำหนด หวังว่าคำอธิบายของฉันเกี่ยวกับสถานการณ์จะชัดเจน

2
หลักการตั้งชื่อของตัวแปรในภาษาการเขียนโปรแกรม C # [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังดูวิดีโอเกี่ยวกับ C # เกี่ยวกับตัวแปร ผู้เขียนประกาศตัวแปรภายในเมธอดและเขาตั้งชื่อดังนี้: string MyName = "James"; คำถามของฉันคือ:. อนุสัญญาใดแนะนำโดย. Net Framework มันเป็นปาสคาลท่อในตัวอย่างข้างต้นหรือเป็นกรณีอูฐ?

4
การใช้บล็อกขอบเขตภายในภายในฟังก์ชั่นมีสไตล์ไม่ดีหรือไม่?
มีบางกรณี (ค่อนข้างหายาก) ที่มีความเสี่ยง: การนำตัวแปรที่ไม่ต้องการนำมาใช้ซ้ำ (ดูตัวอย่างที่ 1) หรือใช้ตัวแปรแทนตัวแปรอื่นปิดความหมาย (ดูตัวอย่างที่ 2) ตัวอย่างที่ 1: var data = this.InitializeData(); if (this.IsConsistent(data, this.state)) { this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer. } // ... foreach (var flow in data.Flows) { // This shouldn't happen: given that ETL possibly …

2
การตั้งชื่อคุณสมบัติที่เหมาะสมเพื่อแสดงสตริงที่ขึ้นต้นด้วยหมายเลข
เมื่อดูเมตาดาต้าของกล้องบางตัวบน Windows File Propertiesจะมี (พร้อมกับอีกสองสาม) Propertiesชื่อความยาวโฟกัสและความยาวโฟกัส 35 มม . ฉันกำลังพัฒนาซอฟต์แวร์ที่จะใช้ประโยชน์จากสองสิ่งPropertiesนี้ จนถึงตอนนี้ฉันได้สร้างPropertyชื่อFocalLengthสำหรับชื่อแรก แต่ฉันไม่สามารถหาชื่อที่เหมาะสมสำหรับชื่ออื่นได้ ฉันคิด_35MmFocalLengthหรือThirtyFiveMmFocalLengthแต่ฉันคิดว่าอาจมีข้อเสนอแนะที่ดีกว่า ความคิดใด ๆ

4
ในการทดสอบหน่วยเหตุใดฉันจะสร้างที่เก็บสองครั้ง
เมื่อวันก่อนฉันอ่านเกี่ยวกับการทดสอบหน่วยเล็กน้อยและฉันเห็นตัวอย่างที่ผู้คนสร้างส่วนต่อประสานที่เก็บ (เช่นIExampleRepository) จากนั้นสร้างที่เก็บจริง ( public class ExampleRepository : IExampleRepository) และที่เก็บที่จะใช้สำหรับการทดสอบหน่วย ( FakeExampleRepository : IExampleRepository) ในIExampleRepositoryพวกเขาใช้วิธีการเดียวกันกับในExampleRepositoryแต่ด้วยคำสั่ง Linq ที่แตกต่างกัน อะไรคือวัตถุประสงค์ตรงนี้? ฉันคิดว่าส่วนหนึ่งของการทดสอบหน่วยของคุณคือตรวจสอบให้แน่ใจว่าวิธีการทำงานถูกต้องหรือไม่ แต่เมื่อฉันใช้แบบสอบถามที่แตกต่างกันสองข้อคำถามหนึ่งสำหรับ 'จริง' และอีกคำถามหนึ่งในการทดสอบการทดสอบมีความรู้สึกมากเพียงใด

4
ความแตกต่างระหว่างการทำงานของอะตอมและความปลอดภัยของเธรดหรือไม่
จากการสนทนาที่ฉันได้เห็นดูเหมือนว่าการทำงานของปรมาณูและความปลอดภัยของเธรดนั้นเป็นสิ่งเดียวกัน แต่ผู้คนมากมายบอกว่าพวกเขาต่างกัน มีใครบอกความแตกต่างได้ไหมถ้ามี

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