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

C # 4.0 นำเสนอคุณลักษณะต่างๆเช่นวัตถุแบบไดนามิกการปรับปรุงการทำงานร่วมกันของ COM ความแปรปรวนร่วมทั่วไปและการตรงกันข้ามพารามิเตอร์ที่เป็นทางเลือกและตั้งชื่อ ใช้แท็กนี้หากคำถามของคุณเกี่ยวกับคุณลักษณะเฉพาะของ C # 4.0 โดยเฉพาะ ควรใช้แท็ก C # หากคำถามของคุณไม่เฉพาะเจาะจงกับคุณลักษณะ C # 4.0

10
ไม่สามารถฝังประเภทการทำงานร่วมกันได้
ฉันกำลังสร้างเว็บแอปพลิเคชันบน. NET 4.0 framework (beta2) ใน C # เมื่อฉันพยายามใช้แอสเซมบลีชื่อ "ActiveHomeScriptLib" ฉันได้รับข้อผิดพลาดต่อไปนี้: ไม่สามารถฝังประเภท Interop 'ActiveHomeScriptLib.ActiveHomeClass' ได้ ใช้อินเทอร์เฟซที่เกี่ยวข้องแทน เมื่อฉันเปลี่ยนกรอบงานเป็นเวอร์ชัน 3.5 ฉันไม่มีข้อผิดพลาดใด ๆ ประเภท Interop คืออะไรและทำไมสิ่งนี้เกิดขึ้นเฉพาะเมื่อฉันใช้กรอบงาน 4.0 เท่านั้น

10
ประโยชน์ที่แท้จริงของ ExpandoObject คืออะไร
ExpandoObjectระดับที่เพิ่มเข้ามา .NET 4 ช่วยให้คุณสามารถตั้งค่าคุณสมบัติพลลงบนวัตถุที่รันไทม์ มีข้อได้เปรียบอะไรบ้างในการใช้ a Dictionary<string, object>หรือแม้กระทั่งHashtableจริงๆ? เท่าที่ฉันสามารถบอกได้นี่คืออะไร แต่เป็นตารางแฮชที่คุณสามารถเข้าถึงได้ด้วยไวยากรณ์ที่กระชับขึ้นเล็กน้อย ตัวอย่างเช่นทำไมจึงเป็นเช่นนี้: dynamic obj = new ExpandoObject(); obj.MyInt = 3; obj.MyString = "Foo"; Console.WriteLine(obj.MyString); ดีกว่าจริงๆหรือแตกต่างอย่างมีนัยสำคัญกว่า: var obj = new Dictionary<string, object>(); obj["MyInt"] = 3; obj["MyString"] = "Foo"; Console.WriteLine(obj["MyString"]); อะไรจริงข้อดีจะได้รับจากการใช้ ExpandoObject แทนเพียงใช้โดยพลการประเภทพจนานุกรมอื่น ๆ กว่าไม่เป็นที่ชัดเจนว่าคุณกำลังใช้ชนิดที่ว่าจะได้รับการพิจารณาที่รันไทม์
587 c#  .net  .net-4.0  c#-4.0 

8
ความแตกต่างระหว่างงานและด้ายคืออะไร?
ใน C # 4.0 เรามีTaskในSystem.Threading.Tasks namespace ความแตกต่างที่แท้จริงระหว่างThreadและTaskคืออะไร ฉันทำโปรแกรมตัวอย่าง (ความช่วยเหลือจาก MSDN) เพื่อการเรียนรู้ด้วยตัวเอง Parallel.Invoke Parallel.For Parallel.ForEach แต่มีข้อสงสัยมากมายเนื่องจากแนวคิดไม่ชัดเจน ฉันเคยค้นหาใน Stackoverflow สำหรับคำถามประเภทเดียวกัน แต่อาจอยู่กับชื่อคำถามนี้ฉันไม่สามารถได้รับเหมือนกัน หากใครรู้เกี่ยวกับคำถามประเภทเดียวกันที่โพสต์ไว้ที่นี่ก่อนหน้านี้โปรดให้ข้อมูลอ้างอิงจากลิงก์

4
ทำไมพารามิเตอร์ทางเลือก C # 4 ที่กำหนดไว้ในส่วนต่อประสานไม่ได้ถูกบังคับใช้ในการใช้งานคลาส?
ฉันสังเกตเห็นว่าด้วยพารามิเตอร์ที่เป็นตัวเลือกใน C # 4 หากคุณระบุพารามิเตอร์ที่เป็นตัวเลือกบนอินเทอร์เฟซที่คุณไม่ต้องทำให้พารามิเตอร์นั้นเป็นตัวเลือกในชั้นเรียนการใช้งานใด ๆ : public interface MyInterface { void TestMethod(bool flag = false); } public class MyClass : MyInterface { public void TestMethod(bool flag) { Console.WriteLine(flag); } } และดังนั้นจึง: var obj = new MyClass(); obj.TestMethod(); // compiler error var obj2 = new MyClass() as MyInterface; obj2.TestMethod(); // …

5
.NET NewtonSoft JSON deserialize map เป็นชื่อคุณสมบัติอื่น
ฉันได้ติดตามสตริง JSON ที่ได้รับจากบุคคลภายนอก { "team":[ { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"home", "score":"22", "team_id":"500" } }, { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"away", "score":"30", "team_id":"600" } } ] } ชั้นเรียนทำแผนที่ของฉัน: public class Attributes { public string eighty_min_score { get; set; } public string home_or_away { get; set; } public string score { get; set; …

4
Parallel.ForEach เทียบกับ Task.Fartory.StartNew
ความแตกต่างระหว่างตัวอย่างโค้ดด้านล่างคืออะไร ทั้งสองจะไม่ใช้เธรดพูลหรือไม่ เช่นถ้าฉันต้องการเรียกใช้ฟังก์ชันสำหรับแต่ละรายการในคอลเลกชัน Parallel.ForEach<Item>(items, item => DoSomething(item)); vs foreach(var item in items) { Task.Factory.StartNew(() => DoSomething(item)); }


4
การเพิ่มคุณสมบัติแบบไดนามิกไปยัง ExpandoObject
ฉันต้องการเพิ่มคุณสมบัติให้กับ ExpandoObject ตอนรันไทม์ ตัวอย่างเช่นการเพิ่มคุณสมบัติสตริงเรียก NewProp ฉันต้องการเขียนบางสิ่งเช่น var x = new ExpandoObject(); x.AddProperty("NewProp", System.String); เป็นไปได้อย่างง่ายดายหรือไม่


15
ตั้งชื่อได้ดีกว่าในคลาส Tuple กว่า“ Item1”,“ Item2”
มีวิธีใช้คลาส Tuple แต่ระบุชื่อของรายการในนั้น? ตัวอย่างเช่น: public Tuple<int, int, int int> GetOrderRelatedIds() ที่ส่งคืนรหัสสำหรับ OrderGroupId, OrderTypeId, OrderSubTypeId และ OrderRequirementId มันจะเป็นการดีถ้าให้ผู้ใช้วิธีการของฉันรู้ว่าอันไหน (เมื่อคุณเรียกใช้เมธอดผลลัพธ์จะเป็นผลลัพธ์Item1, result.Item2, result.Item3, result.Item4 ไม่ชัดเจนว่าจะใช้อันไหน) (ฉันรู้ว่าฉันสามารถสร้างคลาสเพื่อเก็บรหัสเหล่านี้ทั้งหมดได้ แต่รหัสเหล่านี้มีคลาสของตัวเองที่พวกเขาอาศัยอยู่และสร้างคลาสสำหรับค่าส่งคืนของวิธีนี้ดูเหมือนโง่)
204 c#  c#-4.0  tuples 

10
การเข้าถึง HttpListener ถูกปฏิเสธ
ฉันกำลังเขียนเซิร์ฟเวอร์ HTTP ใน C # เมื่อฉันพยายามที่จะใช้ฟังก์ชั่นที่HttpListener.Start()ฉันได้รับการHttpListenerExceptionพูด "ปฏิเสธการเข้าใช้". เมื่อฉันรันแอพในโหมดผู้ดูแลระบบใน windows 7 มันใช้งานได้ดี ฉันสามารถทำให้มันทำงานโดยไม่มีโหมดผู้ดูแลระบบได้หรือไม่ ถ้าใช่เป็นอย่างไร หากไม่ใช่ฉันจะทำให้แอพเปลี่ยนเป็นโหมดผู้ดูแลระบบหลังจากเริ่มทำงานได้อย่างไร using System; using System.Net; namespace ConsoleApplication1 { class Program { private HttpListener httpListener = null; static void Main(string[] args) { Program p = new Program(); p.Server(); } public void Server() { this.httpListener = new HttpListener(); if …

5
ฉันจะเริ่มต้นพารามิเตอร์เป็น Guid.Empty ใน C # ได้อย่างไร
ฉันอยากจะบอกว่า: public void Problem(Guid optional = Guid.Empty) { } แต่คอมไพเลอร์บ่นว่า Guid.Empty ไม่ใช่ค่าคงที่เวลารวบรวม เนื่องจากฉันไม่ต้องการเปลี่ยน API ฉันไม่สามารถใช้: Nullable<Guid>

4
คอมไพเลอร์ C # ตรวจจับประเภท COM ได้อย่างไร
แก้ไข:ฉันได้เขียนผลขึ้นเป็นบล็อกโพสต์ คอมไพเลอร์ C # ใช้ COM ประเภทค่อนข้างน่าอัศจรรย์ ตัวอย่างเช่นคำสั่งนี้ดูเหมือนปกติ ... Word.Application app = new Word.Application(); ... จนกว่าคุณจะรู้ว่านั่นApplicationคือส่วนต่อประสาน การเรียกตัวสร้างบนอินเทอร์เฟซหรือไม่ Yoiks! นี้จริงได้รับการแปลเป็นโทรไปType.GetTypeFromCLSID()และอื่น ๆ Activator.CreateInstanceเพื่อ นอกจากนี้ใน C # 4 คุณสามารถใช้อาร์กิวเมนต์ที่ไม่อ้างอิงสำหรับrefพารามิเตอร์และคอมไพเลอร์เพิ่งเพิ่มตัวแปรท้องถิ่นที่จะผ่านการอ้างอิงโดยยกเลิกผลลัพธ์: // FileName parameter is *really* a ref parameter app.ActiveDocument.SaveAs(FileName: "test.doc"); (ใช่มีข้อโต้แย้งจำนวนมากหายไปพารามิเตอร์ตัวเลือกไม่ดีใช่ไหม :) ฉันพยายามตรวจสอบพฤติกรรมของคอมไพเลอร์และฉันไม่ได้ปลอมส่วนแรก ฉันสามารถทำส่วนที่สองโดยไม่มีปัญหา: using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; [ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")] public interface …

2
Microsoft.csharp.dll คืออะไรใน. NET 4.0
DLL นี้ถูกเพิ่มโดยค่าเริ่มต้นในโครงการ Visual Studio 2010 ชุดใหม่นี้ใช้ทำอะไร? ดูเหมือนว่ามันจะไม่มีอะไรมากหลังจากมองดูมันโดยใช้ Reflector และ Google ก็ไม่ได้พูดอะไรมากมาย

7
เมื่อใดจึงจะยกเลิก CancellationTokenSource
ชั้นเรียนCancellationTokenSourceเป็นแบบใช้แล้วทิ้ง การดูอย่างรวดเร็วใน Reflector พิสูจน์การใช้งานKernelEventซึ่งเป็นทรัพยากรที่ไม่มีการจัดการ (มีโอกาสมาก) เนื่องจากCancellationTokenSourceไม่มี finalizer หากเราไม่ได้กำจัด GC จะไม่ทำเช่นนั้น ในทางกลับกันถ้าคุณดูตัวอย่างที่แสดงอยู่ในบทความ MSDN การยกเลิกในเธรดที่ได้รับการจัดการมีเพียงข้อมูลโค้ดเดียวเท่านั้นที่ใช้โทเค็น เป็นวิธีที่เหมาะสมในการกำจัดมันในรหัสอะไร คุณไม่สามารถตัดโค้ดเพื่อเริ่มงานคู่ขนานของคุณได้usingหากคุณไม่รอ และมันก็สมเหตุสมผลที่จะยกเลิกหากคุณไม่รอ แน่นอนว่าคุณสามารถเพิ่มContinueWithงานด้วยการDisposeโทร แต่นั่นเป็นวิธีที่จะไปไหม? แล้วแบบสอบถาม PLINQ ที่ยกเลิกได้ซึ่งไม่ซิงโครไนซ์ย้อนกลับ แต่ทำอะไรได้บ้างในตอนท้าย สมมติว่า.ForAll(x => Console.Write(x))อย่างไร มันสามารถใช้ซ้ำได้หรือไม่ สามารถใช้โทเค็นเดียวกันสำหรับการโทรหลายครั้งแล้วทิ้งพร้อมกับส่วนประกอบโฮสต์สมมติว่าการควบคุม UI ได้หรือไม่ เนื่องจากมันไม่มีResetวิธีการล้างข้อมูลIsCancelRequestedและTokenฟิลด์ฉันคิดว่ามันไม่สามารถใช้ซ้ำได้ดังนั้นทุกครั้งที่คุณเริ่มงาน (หรือแบบสอบถาม PLINQ) คุณควรสร้างใหม่ มันจริงหรอ? ถ้าใช่คำถามของฉันคือกลยุทธ์ที่ถูกต้องและแนะนำในการจัดการกับอินสแตนซ์Disposeเหล่านั้นCancellationTokenSourceคืออะไร?

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