C# 在另一种方法中使用LINQ变量?

C# 在另一种方法中使用LINQ变量?,c#,linq,grasshopper,C#,Linq,Grasshopper,在下面的代码中,我试图将数组filepath分配给变量m_settings,但是filepath在LINQ方法之外无法识别。如何将filepath的内容存储在可以在SolveInstance方法中使用的变量中 public void ShowSettingsGui() { var dialog = new OpenFileDialog() { Multiselect = true, Filter = "Data Sources (*.ini)|*.

在下面的代码中,我试图将数组
filepath
分配给变量
m_settings
,但是
filepath
在LINQ方法之外无法识别。如何将
filepath
的内容存储在可以在
SolveInstance
方法中使用的变量中

public void ShowSettingsGui()
{
    var dialog = new OpenFileDialog()
    {
        Multiselect = true,
        Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*"
    };
    if (dialog.ShowDialog() != DialogResult.OK) return;
    var paths = dialog.FileNames;
    var FilePaths = paths.ToDictionary(filePath => filePath, File.ReadAllText);
}

private string[] m_settings = Filepaths;  

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

    DA.SetData(0, m_settings);
}
public void ShowSettingsGui()
{
var dialog=新建OpenFileDialog()
{
Multiselect=true,
Filter=“数据源(*.ini)|*.ini*|所有文件|*.”
};
如果(dialog.ShowDialog()!=DialogResult.OK)返回;
var path=dialog.filename;
var filePath=path.ToDictionary(filePath=>filePath,File.ReadAllText);
//你需要加上这个
this.m_settings=文件路径;
}
//您还需要将m_设置的类型从string[]更改为Dictionary
专用字典m_设置=文件路径;
受保护的覆盖实例(IGH_DataAccess DA)
{
如果(m_设置==null)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning,“您必须声明一些有效设置”);
返回;
}
DA.设置数据(0,m_设置);
}
公共无效显示设置GUI()
{
var dialog=新建OpenFileDialog()
{
Multiselect=true,
Filter=“数据源(*.ini)|*.ini*|所有文件|*.”
};
如果(dialog.ShowDialog()!=DialogResult.OK)返回;
var path=dialog.filename;
var filePath=path.ToDictionary(filePath=>filePath,File.ReadAllText);
//你需要加上这个
this.m_settings=文件路径;
}
//您还需要将m_设置的类型从string[]更改为Dictionary
专用字典m_设置=文件路径;
受保护的覆盖实例(IGH_DataAccess DA)
{
如果(m_设置==null)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning,“您必须声明一些有效设置”);
返回;
}
DA.设置数据(0,m_设置);
}

我可能读得太多了,但我认为您不需要文件路径,您可以直接设置m_设置

private Dictionary<string, string> m_settings;  

public void ShowSettingsGui()
{
    var dialog = new OpenFileDialog()
    {
        Multiselect = true,
        Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*"
    };
    if (dialog.ShowDialog() != DialogResult.OK) return;
    var paths = dialog.FileNames;
    m_settings = paths.ToDictionary(filePath => filePath, File.ReadAllText);
}

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

    DA.SetData(0, m_settings);
}
专用字典m_设置;
公共无效显示集GUI()
{
var dialog=新建OpenFileDialog()
{
Multiselect=true,
Filter=“数据源(*.ini)|*.ini*|所有文件|*.”
};
如果(dialog.ShowDialog()!=DialogResult.OK)返回;
var path=dialog.filename;
m_settings=path.ToDictionary(filePath=>filePath,File.ReadAllText);
}
受保护的覆盖实例(IGH_DataAccess DA)
{
如果(m_设置==null)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning,“您必须声明一些有效设置”);
返回;
}
DA.设置数据(0,m_设置);
}

您还需要确保在ShowSettingsGui之后调用SolveInstance,否则m_设置将始终为空

我可能对它读得太多了,但我认为您不需要文件路径,您可以直接设置m_设置

private Dictionary<string, string> m_settings;  

public void ShowSettingsGui()
{
    var dialog = new OpenFileDialog()
    {
        Multiselect = true,
        Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*"
    };
    if (dialog.ShowDialog() != DialogResult.OK) return;
    var paths = dialog.FileNames;
    m_settings = paths.ToDictionary(filePath => filePath, File.ReadAllText);
}

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

    DA.SetData(0, m_settings);
}
专用字典m_设置;
公共无效显示集GUI()
{
var dialog=新建OpenFileDialog()
{
Multiselect=true,
Filter=“数据源(*.ini)|*.ini*|所有文件|*.”
};
如果(dialog.ShowDialog()!=DialogResult.OK)返回;
var path=dialog.filename;
m_settings=path.ToDictionary(filePath=>filePath,File.ReadAllText);
}
受保护的覆盖实例(IGH_DataAccess DA)
{
如果(m_设置==null)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning,“您必须声明一些有效设置”);
返回;
}
DA.设置数据(0,m_设置);
}

您还需要确保在ShowSettingsGui之后调用SolveInstance,否则m_设置将始终为空

您能否在ShowSettingsGui方法中分配m_设置并在SolveInstance中使用m_设置?您能否在ShowSettingsGui方法中分配m_设置并在SolveInstance中使用m_设置?非常感谢,但我收到以下
错误:无法隐式转换类型“System.Collections.Generic.Dictionary”到“string[]”
当前上下文中不存在名称“filepath”
在方法之间声明了一个浮动成员。首先,把它移到顶部。一旦您这样做,您就会意识到文件路径在该级别不存在,因此将m_设置分配给文件路径是无效的。非常感谢,但我收到以下
错误:无法隐式地将类型“System.Collections.Generic.Dictionary”转换为“string[]“
当前上下文中不存在名称“filepath”
在方法之间声明了一个浮动成员。首先,把它移到顶部。一旦你这样做了,你就会意识到文件路径在这个级别上并不存在,因此将m_设置分配给文件路径是无效的。非常感谢,你知道为什么我会得到以下输出,而不是单词本身吗?”{0} 0. System.Collections.Generic.Dictionary`2[System.String,System.String]@arthurmani,您只需要一个文件。不要用字典。只需进行
字符串m_设置
m_settings=File.ReadAllText(dialog.FileName)。输出是这样的,因为这就是
字典。ToString
返回的内容。@arthurmani我已经更新了我的,向您展示了如何操作。非常感谢,您知道为什么我得到以下输出,而不是字典本身吗?”{0} 0. System.Collections.Generic.Dictionary`2[System.String,System.String]@arthurmani,您只需要一个文件。不要用字典。只需进行
字符串m_设置
m_settings=File.ReadAllText(dialog.FileName)。输出是这样的,因为这就是Dictionary.ToString
返回的内容。@arthurmani我已经更新了my,向您展示了如何操作。