C# c语言中的传递函数数组#

C# c语言中的传递函数数组#,c#,javascript,.net-3.5,C#,Javascript,.net 3.5,我想创建列验证器,在那里我可以传递自定义函数/方法 编辑:我不需要动态构建这些函数—可以在构建解决方案之前就进行,而且我只能使用.net 3.5。基本上,我正在尝试为SSIS脚本进程创建可重用类 我不知道如何在C语言中实现这一点,所以我用JavaScript创建了一个快速表示法,表示我想要实现的目标 // Data extracted from file var data = "2|User2|15\r\n3|User1|13"; // Define columns in file var c

我想创建列验证器,在那里我可以传递自定义函数/方法

编辑:我不需要动态构建这些函数—可以在构建解决方案之前就进行,而且我只能使用.net 3.5。基本上,我正在尝试为SSIS脚本进程创建可重用类

我不知道如何在C语言中实现这一点,所以我用JavaScript创建了一个快速表示法,表示我想要实现的目标

// Data extracted from file
var data = "2|User2|15\r\n3|User1|13";

// Define columns in file
var columnKeys = ["ID", "Username", "Age"];

// Custome column validation
var columnValidation = {
    "ID": function (value) {
        if (isNaN(value)) return false;
        else return true;
    },
    "Username": function (value) {
        return true;
    },
    "Age": function (value) {
        return true;
    }
};

var ValidateColumns = function (data, keys, rules) {
    var rowSep = "\r\n";
    var colSep = "|";

    // Get rows
    var rows = data.split(rowSep);
    _.each(rows, function (row) {
        // Get columns
        var columns = row.split(colSep);

        // Validate columns
        _.each(columns, function (column) {
            if (rules[keys[columns.indexOf(column)]](column)) {
                console.log("Column " + keys[columns.indexOf(column)] + ": Passed");
            }
            else {
                console.log("Column " + keys[columns.indexOf(column)] + ": Failed");
            }
        });
    });
};

ValidateColumns(data, columnKeys, columnValidation);
问题:

  • 如何创建将要使用的函数/方法
  • 如何在将验证列的类/方法中传递这些函数

  • 您正在寻找代表。请阅读MSDN文档。我可以建议您使用以下特定链接:


    第一个是关于代理的教程,第二个是关于使用代理的教程。

    您正在寻找代理。请阅读MSDN文档。我可以建议您使用以下特定链接:


    第一个是关于代理的教程,第二个是关于使用代理的教程。

    您正在寻找代理。请阅读MSDN文档。我可以建议您使用以下特定链接:


    第一个是关于代理的教程,第二个是关于使用代理的教程。

    您正在寻找代理。请阅读MSDN文档。我可以建议您使用以下特定链接:


    第一个是关于委托的教程,第二个是关于使用委托的教程。

    您要查找的是谓词。本质上,它表示具有可定义输入类型和布尔输出的函数

    下面是一个传递谓词数组的示例

    //this is a Predicate<string> b/c it takes a string as input and outputs a boolean
    bool ExamplePredicate(string input)
    {
        return input == "something";
    }
    
    //function accepting an array of Predicate<string> as input
    bool Validate(Predicate<string>[] validators /*, other data input*/ )
    {
        //use the array of validators to process your data.
    }
    
    void Test()
    {
        //array of validators
        var validators = new Predicate<string>[]
        {
            aString => !string.IsNullOrEmpty(aString), // you can use lambda expressions
            ExamplePredicate               // or reference functions matching the predicate definitions
        }
        Validate(validators);
    }
    
    //这是一个谓词b/c,它接受字符串作为输入并输出布尔值
    布尔示例谓词(字符串输入)
    {
    返回输入==“某物”;
    }
    //接受谓词数组作为输入的函数
    bool验证(谓词[]验证程序/*,其他数据输入*/)
    {
    //使用验证程序数组来处理数据。
    }
    无效测试()
    {
    //验证器数组
    var validators=新谓词[]
    {
    aString=>!string.IsNullOrEmpty(aString),//可以使用lambda表达式
    ExamplePredicate//或匹配谓词定义的引用函数
    }
    验证(验证器);
    }
    
    文件:
    您要查找的是谓词。本质上,它表示具有可定义输入类型和布尔输出的函数

    下面是一个传递谓词数组的示例

    //this is a Predicate<string> b/c it takes a string as input and outputs a boolean
    bool ExamplePredicate(string input)
    {
        return input == "something";
    }
    
    //function accepting an array of Predicate<string> as input
    bool Validate(Predicate<string>[] validators /*, other data input*/ )
    {
        //use the array of validators to process your data.
    }
    
    void Test()
    {
        //array of validators
        var validators = new Predicate<string>[]
        {
            aString => !string.IsNullOrEmpty(aString), // you can use lambda expressions
            ExamplePredicate               // or reference functions matching the predicate definitions
        }
        Validate(validators);
    }
    
    //这是一个谓词b/c,它接受字符串作为输入并输出布尔值
    布尔示例谓词(字符串输入)
    {
    返回输入==“某物”;
    }
    //接受谓词数组作为输入的函数
    bool验证(谓词[]验证程序/*,其他数据输入*/)
    {
    //使用验证程序数组来处理数据。
    }
    无效测试()
    {
    //验证器数组
    var validators=新谓词[]
    {
    aString=>!string.IsNullOrEmpty(aString),//可以使用lambda表达式
    ExamplePredicate//或匹配谓词定义的引用函数
    }
    验证(验证器);
    }
    
    文件:
    您要查找的是谓词。本质上,它表示具有可定义输入类型和布尔输出的函数

    下面是一个传递谓词数组的示例

    //this is a Predicate<string> b/c it takes a string as input and outputs a boolean
    bool ExamplePredicate(string input)
    {
        return input == "something";
    }
    
    //function accepting an array of Predicate<string> as input
    bool Validate(Predicate<string>[] validators /*, other data input*/ )
    {
        //use the array of validators to process your data.
    }
    
    void Test()
    {
        //array of validators
        var validators = new Predicate<string>[]
        {
            aString => !string.IsNullOrEmpty(aString), // you can use lambda expressions
            ExamplePredicate               // or reference functions matching the predicate definitions
        }
        Validate(validators);
    }
    
    //这是一个谓词b/c,它接受字符串作为输入并输出布尔值
    布尔示例谓词(字符串输入)
    {
    返回输入==“某物”;
    }
    //接受谓词数组作为输入的函数
    bool验证(谓词[]验证程序/*,其他数据输入*/)
    {
    //使用验证程序数组来处理数据。
    }
    无效测试()
    {
    //验证器数组
    var validators=新谓词[]
    {
    aString=>!string.IsNullOrEmpty(aString),//可以使用lambda表达式
    ExamplePredicate//或匹配谓词定义的引用函数
    }
    验证(验证器);
    }
    
    文件:
    您要查找的是谓词。本质上,它表示具有可定义输入类型和布尔输出的函数

    下面是一个传递谓词数组的示例

    //this is a Predicate<string> b/c it takes a string as input and outputs a boolean
    bool ExamplePredicate(string input)
    {
        return input == "something";
    }
    
    //function accepting an array of Predicate<string> as input
    bool Validate(Predicate<string>[] validators /*, other data input*/ )
    {
        //use the array of validators to process your data.
    }
    
    void Test()
    {
        //array of validators
        var validators = new Predicate<string>[]
        {
            aString => !string.IsNullOrEmpty(aString), // you can use lambda expressions
            ExamplePredicate               // or reference functions matching the predicate definitions
        }
        Validate(validators);
    }
    
    //这是一个谓词b/c,它接受字符串作为输入并输出布尔值
    布尔示例谓词(字符串输入)
    {
    返回输入==“某物”;
    }
    //接受谓词数组作为输入的函数
    bool验证(谓词[]验证程序/*,其他数据输入*/)
    {
    //使用验证程序数组来处理数据。
    }
    无效测试()
    {
    //验证器数组
    var validators=新谓词[]
    {
    aString=>!string.IsNullOrEmpty(aString),//可以使用lambda表达式
    ExamplePredicate//或匹配谓词定义的引用函数
    }
    验证(验证器);
    }
    
    文件:

    您应该阅读有关函数和操作的信息

    如果函数返回某个值(如bool!)和/或使用多个参数,则应使用
    Func[]
    并使用尽可能多的TParam参数。这里面有很多功能,所以我建议你阅读一下。这个链接看起来不错:

    如果您的函数不接受任何参数并返回void(很抱歉,在您的示例中并非如此),则可以使用操作[],其用法如下:

    Action action = () => //your function's code;
    //Lame example of using Action[]
    YourMethodThatTakesFuncAsParams(new Action[]{action,action,action});
    
    如果所有函数都返回不同的值和/或使用不同的参数,我认为没有一个干净的解决方案可以实现这一点

    小编辑(因为我不能评论东西!)
    我认为Ben的回答是解决您问题的最恰当和最直接的方法

    您应该阅读有关函数和操作的内容

    如果函数返回某个值(如bool!)和/或使用多个参数,则应使用
    Func[]
    并使用尽可能多的TParam参数。这里面有很多功能,所以我建议你阅读一下。