【问题标题】:Can observable collection be passed as ref parameter?可观察集合可以作为 ref 参数传递吗?
【发布时间】:2011-02-07 18:00:03
【问题描述】:

是否可以将 observable 集合作为引用参数传递?

我收到一个错误,无法将其作为参考参数传递。

这是我收到的确切错误消息:

“索引器的属性不能作为 out 或 ref 参数传递”。

【问题讨论】:

  • 嘿伙计,如果您需要帮助,您将不得不做更多的跑腿工作。我们需要简单的代码来显示错误,你得到的错误信息,无论是运行时错误还是编译时错误,等等。您可以编辑您的帖子以包含这些内容吗?
  • 在 .NET 中,除了结构/值类型之外,您不需要执行此操作。所有非原始类型(引用类型)都由 ref 自动传递,并且大多数情况下,如果您通过 ref 或 out 传递值类型,您的设计可能需要工作。
  • @Will:不完全是。在 C# 中,ref 不会自动传递任何类型。想想Dictionary<string, string>.TryGetValue("blah", out x); 即使字符串是引用类型,Dictionary<string, string>.TryGetValue("blah", x); 也不起作用。
  • @Martin 我不是很清楚。我发现很多......新程序员,让我们称之为他们,认为传递引用类型而不是按值传递的唯一方法是将它作为引用发送。另外,我遗漏了不可变类型,是的。以及您希望从方法调用中返回多个值的反模式,因此必须将所有变量作为 ref (或 out,取决于方法)等等等等...

标签: wpf mvvm observablecollection


【解决方案1】:

是的,您可以通过引用传递ObservableCollection。但是,对于任何类,您都不能通过引用传递this。 (你可以为结构,但请不要。)

如果您在通过引用传递普通变量时遇到问题,请发布一些代码。

编辑:我刚刚看到您的编辑...并且编译器错误消息非常清楚。您不能通过引用传递属性或索引器。所以你不能这样做:

Foo(ref x.SomeProperty);

但你可以这样做:

var tmp = x.SomeProperty;
Foo(ref tmp);
x.SomeProperty = tmp;

【讨论】:

  • 我的 ObservableCollection 属于类。
  • @Anish:查看我编辑的答案。您的问题以前不清楚 - 现在更清楚了,所以希望我的回答会有更多用处。如果没有,请发布您的实际代码,而不仅仅是错误消息。
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2016-12-17
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
相关资源
最近更新 更多