在下面的代码中,我收到了错误
编译时{p>在属性,索引器或动态成员访问权限可能不会作为out或ref参数传递?
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);
}
答案 0 :(得分:5)
我怎么解决这个问题?
不这样做:)你怎么能指望它能够起作用?假设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
的返回值,我希望这是一个成功/失败的价值。你为什么要默默地忽略失败?答案 1 :(得分:2)
使用临时局部变量:
int temp = 0;
if (reader.TryGetInt32("StringCount", ref temp)) {
m_settings.Length = temp;
}
当然,这仍然会留下一些问题:
TryGetInt32
的返回值 - 如果转换失败会怎样?m.settings.Length
真可写吗?