Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用谓词/CreateDelegate有什么问题?_C#_Delegates_Predicate - Fatal编程技术网

C# 使用谓词/CreateDelegate有什么问题?

C# 使用谓词/CreateDelegate有什么问题?,c#,delegates,predicate,C#,Delegates,Predicate,我正在创建一个带有委托的简单代码生成器 为什么在运行时出现此错误: 绑定目标方法时出错 关于以下代码 XAML: 代码隐藏: 谓词返回bool-返回字符串。看起来您想要Func而不是谓词。或者更改这些方法的返回类型和表达式。谓词是一个以字符串作为参数并返回布尔值的函数。 您的返回字符串 您应该使用函数而不是谓词 此外,您应该将函数作为参数而不是名称发送 ParseFieldsWithMethod(x => BuildAssignmentLines(x)); ParseFieldsWithM

我正在创建一个带有委托的简单代码生成器

为什么在运行时出现此错误:

绑定目标方法时出错

关于以下代码

XAML:

代码隐藏:


谓词返回bool-返回字符串。看起来您想要Func而不是谓词。或者更改这些方法的返回类型和表达式。

谓词是一个以字符串作为参数并返回布尔值的函数。 您的返回字符串

您应该使用函数而不是谓词

此外,您应该将函数作为参数而不是名称发送

ParseFieldsWithMethod(x => BuildAssignmentLines(x));
ParseFieldsWithMethod(x => BuildEnabledLines(x));


private string ParseFieldsWithMethod(Func<string, string > parseMethod)
{
            StringBuilder sb = new StringBuilder();
            foreach (var field in _fields)
            {
                sb.Append(parseMethod(field));
            }
            return sb.ToString();
        }

更简单的是,您可以调用:ParseFieldsWithMethodBuildAssignmentLines;:该死有一天我应该试试C:这里是VB的家伙
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;

namespace Parser
{
    public partial class Window1 : Window
    {
        private List<string> _fields;

        public Window1()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _fields = new List<string> { "CustomerID", 
                "CompanyName",
                "ContactName",
                "ContactTitle",
                "Address",
                "City",
                "Region",
                "PostalCode",
                "Country",
                "Phone",
                "Fax"
            };

            Output.Text += ParseFieldsWithMethod("BuildAssignmentLines");
            Output.Text += ParseFieldsWithMethod("BuildEnabledLines");
        }

        private string ParseFieldsWithMethod(string theParseMethod)
        {
            Predicate<string> predicate = (Predicate<string>)Delegate.CreateDelegate(typeof(Predicate<string>),
                typeof(Window1).GetMethod(theParseMethod));

            StringBuilder sb = new StringBuilder();
            foreach (var field in _fields)
            {
                sb.Append(predicate.Invoke(field));
            }
            return sb.ToString();
        }

        public string BuildAssignmentLines(string field)
        {
            return String.Format("customer.{0} = Field_{0}.Text;\n", field);
        }

        public string BuildEnabledLines(string field)
        {
            return String.Format("Field_{0}.IsEnabled = false;\n", field);
        }

    }
}
ParseFieldsWithMethod(x => BuildAssignmentLines(x));
ParseFieldsWithMethod(x => BuildEnabledLines(x));


private string ParseFieldsWithMethod(Func<string, string > parseMethod)
{
            StringBuilder sb = new StringBuilder();
            foreach (var field in _fields)
            {
                sb.Append(parseMethod(field));
            }
            return sb.ToString();
        }