c# - 属性、索引器或动态成员访问不能作为 out 或 ref 参数传递?

标签 c# properties member indexer grasshopper

<分区>

在下面的代码中,我得到了错误

A property, indexer or dynamic member access may not be passed as an out or ref parameter?

编译时在 m_settings.Length 参数上。我该如何解决这个问题?

  public override bool Read(GH_IO.Serialization.GH_IReader reader)
                {
                    if (m_settings != null && m_settings.Length > 0)
                    {
                        reader.TryGetInt32("StringCount", ref m_settings.Length);
                        for (int i = 0; i < m_settings.Length; i++)
                        {
                            reader.TryGetString("String", i, ref m_settings[i]);
                        }
                    }
                    return base.Read(reader);
                }

最佳答案

How could I solve this?

如果不这样做 :) 无论如何,您期望它如何工作?假设 m_settings 是一个数组,数组无论如何都不能改变长度......

如果您真的需要ref行为,您将需要一个局部变量:

int length = m_settings.Length;
reader.TryGetInt32("StringCount", ref length);

// Presumably you want to use length here...
// Perhaps m_settings = new string[length];  ?

坦率地说,这有点奇怪:

  • TryGetInt32 使用 ref 参数而不是 out 参数,这与普通的 TryXXX 模式不同
  • 您忽略了 TryGetInt32 的返回值,我希望它是成功/失败值。你为什么要默默地忽略失败?

关于c# - 属性、索引器或动态成员访问不能作为 out 或 ref 参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12440013/

相关文章:

c# - 在 C# .NET 中用单个值初始化整数数组

javascript - Angular.js $resource 与 ASP.Net webapi?

c# - 在来自asp.net的上传文件中以C#编辑mp3

c# - 知道对象的字段/属性是 "simple/primitive"类型还是其他对象?

c# - Properties.Settings.Default.Save(); ->那个文件在哪里

c++ - 使成员函数中的静态变量独立于每个实例

c# - 在 C# 中添加可为 null 的小数

java - 带有列表作为单个键值的属性文件

c++ - 包含模板数据而不使用模板类

C++ 静态声明