1

以下のコードでは、エラーが発生します

プロパティ、インデクサー、または動的メンバー アクセスは、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);
                }
4

2 に答える 2

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パラメーターの代わりにパラメーターを使用しますoutTryXXX
  • の戻り値を無視していますがTryGetInt32、これは成功/失敗の値であると予想されます。失敗を黙って無視したいのはなぜですか?
于 2012-09-15T18:40:46.347 に答える
2

一時的なローカル変数を使用します。

int temp = 0;
if (reader.TryGetInt32("StringCount", ref temp)) {
    m_settings.Length = temp;
}

もちろん、これにはまだいくつかの疑問が残されています。

  • の戻り値をチェックしませんTryGetInt32-- 変換が失敗した場合はどうなりますか?
  • m.settings.Length本当に書き込み可能ですか?
于 2012-09-15T18:40:25.450 に答える