C# c语言中的传递函数数组#
我想创建列验证器,在那里我可以传递自定义函数/方法 编辑:我不需要动态构建这些函数—可以在构建解决方案之前就进行,而且我只能使用.net 3.5。基本上,我正在尝试为SSIS脚本进程创建可重用类 我不知道如何在C语言中实现这一点,所以我用JavaScript创建了一个快速表示法,表示我想要实现的目标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
// 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参数。这里面有很多功能,所以我建议你阅读一下。