คอลเลกชันที่สังเกตได้สามารถส่งผ่านเป็นพารามิเตอร์อ้างอิงได้หรือไม่

คอลเลกชันที่สังเกตได้สามารถส่งผ่านเป็นพารามิเตอร์อ้างอิงได้หรือไม่

ฉันได้รับข้อผิดพลาดว่าไม่สามารถส่งเป็นพารามิเตอร์อ้างอิงได้

นี่คือข้อความแสดงข้อผิดพลาดที่ฉันได้รับ:

"คุณสมบัติของตัวสร้างดัชนีไม่สามารถส่งผ่านเป็นพารามิเตอร์ออกหรืออ้างอิง"


person Relativity    schedule 07.02.2011    source แหล่งที่มา
comment
เฮ้เพื่อน คุณจะต้องออกกำลังกายเพิ่มขึ้นอีกหน่อยถ้าคุณต้องการความช่วยเหลือ เราจำเป็นต้องมีโค้ดง่ายๆ ที่ยังคงแสดงข้อผิดพลาด ข้อความแสดงข้อผิดพลาดที่คุณได้รับ ไม่ว่าจะเป็นข้อผิดพลาดรันไทม์หรือเวลาคอมไพล์ และอื่นๆ อีกมากมาย คุณช่วยแก้ไขโพสต์ของคุณเพื่อรวมสิ่งเหล่านั้นได้ไหม   -  person Chris Pfohl    schedule 07.02.2011
comment
ใน .NET คุณไม่จำเป็นต้องทำเช่นนี้เพื่อสิ่งอื่นใดนอกจากประเภท structs/value ทุกประเภทที่ไม่ใช่แบบดั้งเดิม (ประเภทการอ้างอิง) จะถูกส่งผ่านโดยการอ้างอิงโดยอัตโนมัติ และโดยส่วนใหญ่หากคุณส่งประเภทค่าโดยการอ้างอิงหรือส่งออกการออกแบบของคุณอาจต้องการการปรับปรุง   -  person    schedule 07.02.2011
comment
@Will: ไม่แน่นอน ใน C# ไม่มีประเภทใดถูกส่งผ่านโดยการอ้างอิงโดยอัตโนมัติ ลองนึกถึง Dictionary<string, string>.TryGetValue("blah", out x); แม้ว่าสตริงจะเป็นประเภทการอ้างอิง แต่ Dictionary<string, string>.TryGetValue("blah", x); จะไม่ทำงาน   -  person R. Martinho Fernandes    schedule 07.02.2011
comment
@Martin ฉันไม่ชัดเจนนัก ฉันพบว่า ... โปรแกรมเมอร์หน้าใหม่จำนวนมาก ลองเรียกพวกเขาว่า คิดว่าวิธีเดียวที่จะส่งผ่านประเภทการอ้างอิงเพื่อที่จะไม่ส่งผ่านค่าคือส่งมันเป็นการอ้างอิง นอกจากนี้ฉันยังละทิ้งประเภทที่ไม่เปลี่ยนรูปออกใช่ และรูปแบบการต่อต้านที่คุณต้องการคืนค่าหลายค่าจากการเรียกใช้เมธอดและต้องส่งตัวแปรทั้งหมดของคุณเป็นการอ้างอิง (หรือออกขึ้นอยู่กับวิธีการ) ฯลฯ ฯลฯ ฯลฯ ...   -  person    schedule 07.02.2011


คำตอบ (1)


ใช่ คุณสามารถส่ง ObservableCollection โดยการอ้างอิงได้ อย่างไรก็ตาม คุณไม่สามารถผ่าน this โดยการอ้างอิงสำหรับคลาสใดๆ ได้ (คุณสามารถสร้างโครงสร้างได้ แต่โปรดอย่าทำ)

หากคุณประสบปัญหาในการส่งตัวแปรปกติโดยการอ้างอิง โปรดโพสต์โค้ดบางส่วน

แก้ไข: ฉันเพิ่งเห็นการแก้ไขของคุณ... และข้อความแสดงข้อผิดพลาดของคอมไพเลอร์ค่อนข้างชัดเจน คุณไม่สามารถส่งคุณสมบัติหรือตัวสร้างดัชนีโดยการอ้างอิงได้ ดังนั้นคุณไม่สามารถทำได้:

Foo(ref x.SomeProperty);

แต่คุณสามารถทำได้:

var tmp = x.SomeProperty;
Foo(ref tmp);
x.SomeProperty = tmp;
person Jon Skeet    schedule 07.02.2011
comment
ObservableCollection ของฉันเป็นคลาสประเภท - person Relativity; 07.02.2011
comment
@Anish: ดูคำตอบที่แก้ไขของฉัน คำถามของคุณไม่ชัดเจนมาก่อน - ตอนนี้ชัดเจนยิ่งขึ้นแล้ว หวังว่าคำตอบของฉันจะมีประโยชน์มากขึ้น ถ้าไม่ โปรดโพสต์รหัสจริงของคุณ ไม่ใช่แค่ข้อความแสดงข้อผิดพลาด - person Jon Skeet; 07.02.2011