【问题标题】:FileDialog filter - LINQ concatenationFileDialog 过滤器 - LINQ 连接
【发布时间】:2017-07-18 05:49:06
【问题描述】:

在创建服务以显示 OpenFileDialog/SaveFileDialog 时,我正在考虑创建 LINQ 查询/清除 C# 代码到 Concatinate()/Join() 过滤表达式。

根据此调用进行过滤:

string res = "";
if(new Service().ShowOpenFileDialog(out res,
      new string[]{ "JPG", "TXT", "FBX"},
      new string[]{ "Images", "TextFile", "FilmBox"}))
    Console.WriteLine(res); //DisplayResult

示例定义:

public bool ShowOpenFileDialog(out string result, string[] ext, string[] desc)
{
    if(ext.Length != desc.Length) return false;

    OpenFileDialog diag = new OpenFileDialog();

    // problematic part
    // diag.Filter = "Text File (*.txt)|*.txt";
    // diag.Filter = desc[0] + " (*." + ext[0] + ")|*." + ext[0];
    // diag.Filter += "|"+desc[1] + " (*." + ext[1] + ")|*." + ext[1];

    // I tried something like:
    // diag.Filter = String.Join("|", desc.Concat(" (*." + ext[0] + ")|*." + ext[0]));
    // but not sure how to pass indexes across LINQ queries

    diag.Filter = /* LINQ? */

    if(diag.ShowDialog() == true)
    {
        result = diag.FileName;
        return true;
    }
    return false;
}

问题:是否可以创建 LINQ 以这种格式连接/连接 2 个数组?是否需要通过代码来完成?如果是这样,最干净/最便宜的解决方案是什么?

注意:作为过滤器(结果)示例:

"Images (*.JPG)|*.JPG |TextFile (*.TXT)|*.TXT |FilmBox (*.FBX)|*.FBX"

编辑:另外请考虑数组中可能有n 项。

【问题讨论】:

    标签: c# string linq filter filedialog


    【解决方案1】:

    您应该使用Select 来迭代您的集合。此外,字符串插值在这里也派上用场。

    string filter = string.Join
                           ( "|"
                           , ext.Zip
                                 ( desc
                                 , (e, d) => new
                                             { Ext = e
                                             , Desc = d
                                             }
                                 )
                                .Select(item => $"{item.Desc} (*.{item.Ext})|*.{item.Ext}")
                           );
    

    【讨论】:

    • 感谢您的回答,但是如果我将此 1to1 放入代码中,则输出为:(*.I)|*.m| (*.T)|*.e| (*.F)|*.i
    • 不确定我在想什么,但更新后的答案应该会更好。
    • 确实如此,但尚未明确结果。 =) ,通过编辑修复。
    • 啊,我这边的复制/粘贴错误。
    • 感谢您的回答,您确实扩展了我对Zip/Select 的知识(边界) - 我不知道我可以这样使用它!
    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多