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

C # (ออกเสียงว่า "ดูคม") เป็นภาษาการเขียนโปรแกรมหลายกระบวนทัศน์ในระดับสูงพิมพ์แบบคงที่พัฒนาโดย Microsoft รหัส C # มักกำหนดเป้าหมายกลุ่มเครื่องมือ. NET ของ Microsoft และรันไทม์ซึ่งรวมถึง. NET Framework, .NET Core และ Xamarin เป็นต้น ใช้แท็กนี้สำหรับคำถามเกี่ยวกับโค้ดที่เขียนในข้อกำหนดทางการของ C # หรือ C #

3
ความแตกต่างใน C # ระหว่างสไตล์ getter ที่แตกต่างกัน
บางครั้งฉันเห็นตัวย่อในคุณสมบัติของผู้ทะเยอทะยาน เช่นสองประเภทนั้น: public int Number { get; } = 0 public int Number => 0; ใครช่วยได้โปรดบอกฉันว่ามีความแตกต่างระหว่างทั้งสอง พวกเขาทำงานอย่างไร ทั้งคู่เป็นแบบอ่านอย่างเดียวหรือไม่

5
ปัญหาประเภท Nullable กับ?: ผู้ประกอบการตามเงื่อนไข
มีคนอธิบายได้ไหมว่าทำไมสิ่งนี้ถึงใช้งานได้ใน C # .NET 2.0: Nullable<DateTime> foo; if (true) foo = null; else foo = new DateTime(0); ... แต่นี่ไม่ใช่: Nullable<DateTime> foo; foo = true ? null : new DateTime(0); แบบฟอร์มหลังทำให้ฉันมีข้อผิดพลาดในการคอมไพล์ "ไม่สามารถระบุชนิดของนิพจน์เงื่อนไขได้เนื่องจากไม่มีการแปลงโดยนัยระหว่าง '<null>' และ 'System.DateTime' ไม่ใช่ว่าฉันไม่สามารถใช้รูปแบบเดิมได้ แต่รูปแบบที่สองนั้นสอดคล้องกับส่วนที่เหลือของรหัสของฉันมากกว่า


18
แนวปฏิบัติที่ดีที่สุดสำหรับ“ Copy Local” และการอ้างอิงโครงการคืออะไร
ฉันมีไฟล์โซลูชัน c # ขนาดใหญ่ (ประมาณ 100 โครงการ) และฉันพยายามปรับปรุงเวลาสร้าง ฉันคิดว่า "Copy Local" เป็นเรื่องสิ้นเปลืองในหลาย ๆ กรณีสำหรับเรา แต่ฉันสงสัยเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุด ใน. sln ของเราเรามีแอปพลิเคชัน A ขึ้นอยู่กับแอสเซมบลี B ซึ่งขึ้นอยู่กับแอสเซมบลี C ในกรณีของเรามี "B" และ "C" เพียงไม่กี่อย่าง เนื่องจากสิ่งเหล่านี้รวมอยู่ใน. sln เราจึงใช้การอ้างอิงโครงการ ชุดประกอบทั้งหมดในปัจจุบันสร้างเป็น $ (SolutionDir) / Debug (หรือ Release) โดยค่าเริ่มต้น Visual Studio ทำเครื่องหมายการอ้างอิงโครงการเหล่านี้เป็น "Copy Local" ซึ่งส่งผลให้ทุก "C" ถูกคัดลอกลงใน $ (SolutionDir) / …

2
ปัญหาต้นไม้แคชที่สามารถเข้าถึงได้ของ Google Chrome กับ UI Automation
Google Chrome จะไม่รีเฟรชองค์ประกอบการเข้าถึง ( AutomationElement ) เมื่อผู้ใช้เลื่อนลงในเบราว์เซอร์ ในการทำซ้ำ: เปิดใช้งานการเข้าถึง renderer กับ หรือโดยการตั้งค่าในการเข้าถึงทั่วโลกที่"chrome --force-render-accessibility""chrome://accessibility" ไปที่http://en.wikipedia.org/wiki/Google เปิดinspect.exeใน UI Automation Mode (จาก Windows Kits) ค้นหาองค์ประกอบ "ลิงก์ไปยังบทความที่เกี่ยวข้อง" กลับมาที่ Chrome เลื่อนลงจนกว่าจะเห็น "ลิงก์ไปยังบทความที่เกี่ยวข้อง" ที่ด้านล่าง องค์ประกอบ "ลิงก์ไปยังบทความที่เกี่ยวข้อง" ถูกทำเครื่องหมายบนหน้าจอ ฉันพบวิธีแก้ปัญหาด้วยตนเองที่สามารถบังคับให้ Chrome รีเฟรช: ตั้งค่าซูมเป็น 90% จากนั้นตั้งค่ากลับเป็น 100% (น่าเกลียดมาก ๆ ) ปิดการช่วยสำหรับการเข้าถึงจากนั้นเปิดใหม่ chrome://accessibility/ สิ่งที่ฉันกำลังมองหาคือความสามารถในการดำเนินการอย่างใดอย่างหนึ่งเหล่านี้โดยทางโปรแกรมหรือการดำเนินการใด ๆ ที่สามารถทำให้ Chrome รีเฟรชแคชทรี สิ่งที่ฉันได้ลอง: ปรับขนาดหน้าต่างด้วย …

9
Panel.Dock กรอกข้อมูลโดยไม่สนใจการตั้งค่า Panel.Dock อื่น ๆ
ถ้าคุณสร้างพาเนลบนแบบฟอร์มและตั้งค่าเป็น Dock = Top แล้วปล่อยพาเนลอื่นแล้วตั้งค่า Dock = Fill มันอาจเติมทั้งฟอร์มโดยไม่สนใจพาเนลแรก การเปลี่ยนลำดับแท็บไม่ทำอะไรเลย

6
ฉันจะเพิ่ม ToolTip ให้กับตัวควบคุมได้อย่างไร
ฉันมีตัวควบคุมบางอย่างที่ฉันต้องการให้แสดงToolTipเมื่อเมาส์อยู่เหนือเมาส์ ฉันจะทำสิ่งนี้ได้อย่างไร ฉันต้องการทราบวิธีการทำอย่างถูกต้องในรหัส แต่ยังอยู่ในนักออกแบบ (มีToolTipส่วนประกอบในกล่องเครื่องมือ แต่ฉันไม่ได้ค่อนข้าง .. รับมัน) ฉันจะไม่แปลกใจถ้านี่เป็นสิ่งที่ซ้ำกัน แต่ฉันสามารถค้นหาคำถามที่อยู่ในสถานการณ์ขั้นสูงและเฉพาะเจาะจงมากขึ้นเท่านั้น ฉันต้องการทราบพื้นฐาน
154 c#  winforms  tooltip 

15
ฉันจะดักการเรียกเมธอดใน C # ได้อย่างไร
สำหรับคลาสที่กำหนดฉันต้องการมีฟังก์ชั่นการติดตามเช่นฉันต้องการบันทึกการเรียกใช้เมธอดทุกครั้ง (ลายเซ็นเมธอดและค่าพารามิเตอร์จริง) และทุกเมธอดออก (แค่ลายเซ็นเมธอด) ฉันจะทำสิ่งนี้สำเร็จโดยสมมติว่า: ฉันไม่ต้องการใช้ห้องสมุด AOP ของบุคคลที่สามสำหรับ C # ฉันไม่ต้องการเพิ่มรหัสที่ซ้ำกันไปยังวิธีการทั้งหมดที่ฉันต้องการติดตาม ฉันไม่ต้องการเปลี่ยน API สาธารณะของชั้นเรียน - ผู้ใช้ของชั้นเรียนควรสามารถเรียกใช้วิธีการทั้งหมดได้ในลักษณะเดียวกัน เพื่อให้คำถามที่เป็นรูปธรรมมากขึ้นสมมติว่ามี 3 คลาส: public class Caller { public static void Call() { Traced traced = new Traced(); traced.Method1(); traced.Method2(); } } public class Traced { public void Method1(String name, Int32 value) { } public …
154 c#  reflection  aop 


6
ฉันจะทราบได้อย่างไรว่ากระบวนการใดที่ล็อกไฟล์โดยใช้. NET
ฉันเห็นคำตอบหลายข้อเกี่ยวกับการใช้การจัดการหรือการตรวจสอบกระบวนการแต่ฉันต้องการที่จะค้นหาในรหัสของตัวเอง (C #) ซึ่งกระบวนการจะล็อคไฟล์ ฉันมีความรู้สึกที่น่ารังเกียจว่าฉันจะต้องทำสิ่งต่าง ๆ ใน win32 API แต่ถ้าใครทำสิ่งนี้ไปแล้วและสามารถนำฉันไปสู่เส้นทางที่ถูกต้องฉันจะขอบคุณความช่วยเหลือจริงๆ ปรับปรุง ลิงก์ไปยังคำถามที่คล้ายกัน วิธีการหนึ่งที่จะคิดออกว่ากระบวนการล็อคไฟล์โดยใช้ c #? เครื่องมือบรรทัดคำสั่ง ข้ามเครือข่าย กำลังล็อคอุปกรณ์ USB การทดสอบหน่วยล้มเหลวด้วยไฟล์ที่ถูกล็อค การลบไฟล์ที่ถูกล็อค
154 c#  file-locking 

4
เหตุใดและวิธีการหลีกเลี่ยงการรั่วไหลของหน่วยความจำตัวจัดการเหตุการณ์?
ฉันเพิ่งรู้เมื่ออ่านคำถามและคำตอบใน StackOverflow ว่าการเพิ่มตัวจัดการเหตุการณ์ที่ใช้+=ใน C # (หรือฉันเดาภาษา. net อื่น ๆ ) อาจทำให้หน่วยความจำรั่วทั่วไป ... ฉันเคยใช้ตัวจัดการเหตุการณ์เช่นนี้มาหลายครั้งแล้วและไม่เคยรู้เลยว่าพวกเขาสามารถทำให้เกิดหรือทำให้หน่วยความจำรั่วในแอปพลิเคชันของฉัน ทำงานอย่างไร (หมายถึงเหตุใดจึงทำให้หน่วยความจำรั่ว) ฉันจะแก้ไขปัญหานี้ได้อย่างไร ใช้-=ตัวจัดการเหตุการณ์เดียวกันเพียงพอหรือไม่ มีรูปแบบการออกแบบทั่วไปหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการสถานการณ์เช่นนี้หรือไม่? ตัวอย่าง: ฉันควรจัดการแอปพลิเคชันที่มีหลายเธรดต่างกันอย่างไรโดยใช้ตัวจัดการเหตุการณ์ต่าง ๆ เพื่อเพิ่มหลายเหตุการณ์บน UI มีวิธีที่ดีและเรียบง่ายในการตรวจสอบนี้อย่างมีประสิทธิภาพในแอปพลิเคชันขนาดใหญ่ที่สร้างขึ้นแล้วหรือไม่?

8
C # - วิธีรับไฟล์โปรแกรม (x86) ใน Windows 64 บิต
ฉันกำลังใช้: FileInfo( System.Environment.GetFolderPath( System.Environment.SpecialFolder.ProgramFiles) + @"\MyInstalledApp" เพื่อตรวจสอบว่าโปรแกรมตรวจพบในเครื่องผู้ใช้ (ไม่เหมาะ แต่โปรแกรมที่ฉันกำลังมองหาคือ kludge แบบเก่าที่ถูกต้องของแอปพลิเคชัน MS-DOS และฉันไม่สามารถคิดวิธีอื่นได้) ใน Windows XP และ Windows Vista รุ่น 32 บิตทำงานได้ดี อย่างไรก็ตามใน x64 Windows Vista โค้ดจะส่งคืนโฟลเดอร์ x64 Program Files ในขณะที่ติดตั้งแอปพลิเคชันใน Program Files x86 มีวิธีที่จะส่งคืนพา ธ ไปยัง Program Files x86 โดยทางโปรแกรมโดยไม่ต้องเดินสายไฟอย่างยากลำบาก "C: \ Program Files (x86)" หรือไม่?
153 c#  windows  file  64-bit 

7
MVC 3: วิธีการที่จะทำให้มุมมองที่ไม่มีเค้าโครงหน้าของมันเมื่อโหลดผ่านอาแจ็กซ์?
ฉันกำลังเรียนรู้เกี่ยวกับการเพิ่มประสิทธิภาพแบบก้าวหน้าและฉันมีคำถามเกี่ยวกับมุมมอง AJAXifying ในโครงการ MVC 3 ของฉันฉันมีหน้าเลย์เอาต์หน้าเริ่มต้นและมุมมองธรรมดาสองมุมมอง หน้าเริ่มต้นอยู่ในรูทของโฟลเดอร์มุมมองและใช้กับมุมมองทั้งหมด มันระบุว่ามุมมองทั้งหมดควรใช้_Layout.cshtmlสำหรับหน้าเค้าโครงของพวกเขา หน้าเลย์เอาต์มีลิงก์การนำทางสองลิงก์หนึ่งรายการสำหรับแต่ละมุมมอง การเชื่อมโยงการใช้งาน@Html.ActionLink()ที่จะทำให้ตัวเองไปยังหน้า ตอนนี้ผมได้เพิ่ม jQuery และต้องการที่จะจี้เชื่อมโยงเหล่านี้และใช้อาแจ็กซ์ในการโหลดเนื้อหาของพวกเขาบนหน้าเว็บแบบไดนามิก <script type="text/javascript"> $(function () { $('#theLink').click(function () { $.ajax({ url: $(this).attr('href'), type: "GET", success: function (response) { $('#mainContent').html(response); } }); return false; }); }); </script> มีสองวิธีที่ฉันสามารถคิดทำ แต่ฉันไม่ชอบโดยเฉพาะอย่างยิ่ง: 1) ฉันสามารถนำเนื้อหาทั้งหมดของมุมมองและวางไว้ในมุมมองบางส่วนจากนั้นให้มุมมองหลักเรียกมุมมองบางส่วนเมื่อมีการแสดงผล ด้วยวิธีนี้Request.IsAjaxRequest()ในการใช้งานคอนโทรลเลอร์ฉันสามารถส่งคืนView()หรือส่งคืนข้อมูลPartialView()โดยพิจารณาว่าคำขอนั้นเป็นคำขอ Ajax หรือไม่ ฉันไม่สามารถคืนค่ามุมมองปกติไปยังคำขอ Ajax ได้เพราะจะใช้หน้าเลย์เอาต์และฉันจะได้รับสำเนาชุดที่สองของหน้าเลย์เอาต์ อย่างไรก็ตามฉันไม่ชอบสิ่งนี้เพราะมันบังคับให้ฉันสร้างมุมมองว่างเปล่าที่มีเพียงแค่@{Html.RenderPartial();}ในมุมมองสำหรับคำขอ GET …

12
แหล่งที่มาไม่สามารถเข้าถึงได้เมื่อใช้คอนโซล NuGet Package Manager
เรากำลังย้ายการจัดการแพ็กเกจของเราจากการอัปเดตไฟล์เป็น NuGet ด้วยตนเอง ฉันกำลังพยายามติดตั้งแพคเกจเวอร์ชันเก่าเพื่อให้ตรงกับที่เรามีอยู่แล้วในการควบคุมแหล่งที่มา ไม่มีวิธีการทำเช่นนี้จาก UI ดังนั้นฉันใช้บรรทัดคำสั่งเพื่อรับรุ่นที่เหมาะสม ด้วยเหตุผลบางอย่างInstall-Packageบอกต่อไปเรื่อย ๆ ว่า nuget gallery ไม่สามารถเข้าถึงได้ แหล่งที่มาที่ nuget.org [ https://www.nuget.org/api/v2/]ไม่สามารถเข้าถึงได้ ย้อนกลับไปที่ NuGet Local Cache สิ่งนี้เกิดขึ้นได้จากหนึ่งในโซลูชันของเราเท่านั้น หากฉันสร้างโซลูชันใหม่หรือใช้โซลูชันอื่นในที่เก็บเดียวกันแพ็กเกจจะติดตั้งตามที่คาดไว้ ฉันยังสามารถติดตั้งแพ็กเกจในโซลูชันจำลองเพื่อเติมแคชโลคัลและติดตั้งแพ็กเกจได้สำเร็จในโซลูชันที่ผิดพลาด ฉันได้ลองแล้วInvoke-WebRequestที่ url จาก NuGet Console และได้รับ HTTP 200 แล้ว อะไรทำให้เกิดสิ่งนี้ มีวิธีการแทนที่แหล่งที่มาของแพคเกจบนพื้นฐานต่อการแก้ปัญหา / โครงการ?

10
เหตุใดเขตข้อมูลส่วนตัวจึงเป็นประเภทส่วนตัวไม่ใช่เช่นนั้น
ใน C # (และภาษาอื่น ๆ อีกมากมาย) การเข้าใช้ฟิลด์ส่วนตัวของอินสแตนซ์อื่นประเภทเดียวกันนั้นถูกต้องตามกฎหมาย ตัวอย่างเช่น: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if (anotherFoo.aBool) ... } } เนื่องจากข้อกำหนดC # (ส่วน 3.5.1, 3.5.2) ระบุว่าการเข้าถึงฟิลด์ส่วนตัวอยู่ในประเภทไม่ใช่อินสแตนซ์ ฉันกำลังคุยเรื่องนี้กับเพื่อนร่วมงานและเรากำลังพยายามหาเหตุผลว่าทำไมมันถึงใช้งานได้ (แทนที่จะ จำกัด การเข้าถึงอินสแตนซ์เดียวกัน) อาร์กิวเมนต์ที่ดีที่สุดที่เราสามารถหาได้คือการตรวจสอบความเท่าเทียมกันซึ่งคลาสอาจต้องการเข้าถึงฟิลด์ส่วนตัวเพื่อกำหนดความเท่าเทียมกันกับอินสแตนซ์อื่น มีเหตุผลอื่นอีกไหม? หรือเหตุผลทองบางอย่างที่หมายความว่ามันต้องทำงานอย่างนี้หรือบางสิ่งจะเป็นไปไม่ได้อย่างสมบูรณ์?

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