3

以下のコードを実行すると、次のエラー メッセージが表示されます。

c#: 出力パラメーター インデックス [1] コンポーネントに対して高すぎるか低すぎます。

は、 「現在の反復回数を取得する」IGH_DataAccessというヘルプで既に反復回数を提供しています。ソリューション中にコンポーネントで関数が初めて呼び出されると、反復カウンターはゼロになります。後続の呼び出しごとに 1 ずつ増加します。使用すると、最初の行が表示されます。SolveInstance()DA.SetData(0, m_settings[0]);

使用したプログラムにエラー メッセージが表示され、次の例外が発生しDA.SetData(i, m_settings[i]);ます。

System.Exception occurred Message=Unknown file Source=Grasshopper StackTrace: at Grasshopper.Global_Proc.ASSERT(Guid assert_id, String message, Exception exception) in C:\dev\Grasshopper\1.0\root\src\GH_GlobalProc.vb:line 98 InnerException:

以下は、IGH_DataAccess.SetData メソッドの説明です。Stores data in an output parameter during GH_Component.SolveInstance(). Use this function only for setting individual data items. If you want to set lists of data, you *must* call SetDataList() instead.

コードをDA.SetDataList(i, m_settings[i]);最初の行の文字に変更すると、すべての行を分割したいときに分割されます。

私は何を間違っていますか?

string[] m_settings;

public void ShowSettingsGui()
{
    var dialog = new OpenFileDialog { 
                     Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*" };
    if (dialog.ShowDialog() != DialogResult.OK) return;
    m_settings = File.ReadAllLines(dialog.FileName);
    ExpireSolution(true);
}

protected override void SolveInstance(IGH_DataAccess DA)
{
    if (m_settings == null)
    {
        AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, 
                          "You must declare some valid settings");
        return;
    }

    for (var i = 0; i < m_settings.Length; i++)
    {
        DA.SetData(i, m_settings[i]);
    }
}

前もって感謝します!

4

1 に答える 1

1

これは、次のコードを使用して、SetDataをループなしのSetDatalistに置き換え、文字列を分割する別の方法で解決しました。

  string m_settings_temp;
            string[] m_settings;
            public void ShowSettingsGui()
            {
                var dialog = new OpenFileDialog { Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*" };
                if (dialog.ShowDialog() != DialogResult.OK) return;

                m_settings_temp = File.ReadAllText(dialog.FileName);
                m_settings = m_settings_temp.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                ExpireSolution(true);
            }



            protected override void SolveInstance(IGH_DataAccess DA)
            {
                if (m_settings == null)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "You must declare some valid settings");
                    return;
                }

                else

                {  
                        DA.SetDataList(0, m_settings);
                }  

            }
于 2012-08-13T17:39:03.753 に答える