跪求,,,,,Func代理遇到的问题急。。。。。。。。急解决 本帖最后由 whizen 于 2011-03-23 16:04:07 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 调试时候能得到local=false,但是不知道怎么判断。用if(local==fase)编译发生错误。请各位兄弟告诉下判断方法。 local = inputProcess();local = logicProcess();local = mainProcess();最后会覆盖第一个吧?你的3个方法返回3个boolpublic bool CheckMethod() { if (String.IsNullOrEmpty(this.TextBox1.Text.Trim())) return false; else return true; } public bool CheckLogicMethod() { if (this.TextBox1.Text.Trim().Length <=5) return false; else return true; } public bool DataBindMethod() { this.TextBox1.Text = "数据处理OK,已经被插入到数据库中。"; return true; } }搞不懂 既然都有MainMethod()那就直接local = mainProcess();得了呗 对local 进行类型判断 对 false 和 0 进行 停止动作 强制转换呗调用直接写方法就行了,默认会给你创建个匿名代理var result = Process<bool>(Check1, Check1, Check1);static bool Check1(){ return false;}public static TResult Process<TResult>(Func<TResult> inputProcess, Func<TResult> logicProcess, Func<TResult> mainProcess){ TResult local; local = inputProcess(); if (local is bool) { var success = Convert.ToBoolean(local); if (!success) return default(TResult); } local = logicProcess(); local = mainProcess(); return local;} 改写下:public static TResult Process<TResult>(params Func<TResult>[] processes){ TResult local = default(TResult); foreach (var func in processes) { local = func(); if (local is bool) { var success = Convert.ToBoolean(local); if (!success) return local; } } return local;} public static boo Process<bool>( Func<bool> inputProcess, Func<bool> logicProcess, Func<bool> mainProcess) 为什么要用TResult,直接用bool不就好了。 public static TResult Process<TResult>(params Func<TResult>[] processes){ TResult local = default(TResult); foreach (var func in processes) { local = func(); if (local is bool) { var success = Convert.ToBoolean(local); if (!success) return local; } } return local;}fangxinggood:#8楼 的方法怎么被调用呢?也就是说我有多个方法需要传入的时候我怎么调用你写的方法。请给一下例子,马上结贴给分。马上结贴给分。fangxinggood:太谢谢你了。 如果类型确定,可以直接用Func<bool>,否则就按非哥说的先转换TResult为bool然后可以直接进行逻辑运算try{ local = inputProcess() && logicProcess() && mainProcess();} catch (Exception ex){ local = false;} 用Func<bool>的话就固定了类型,如果我有其他的方法比如:Func<string>就不适用了。用TResult是最好的扩展选择比如:1,string method1,string method2,string method32,bool method1,bool method2,bool method3以上两组都可以兼容的。fangxinggood:#8楼 的方法怎么被调用呢?也就是说我有多个方法需要传入的时候我怎么调用你写的方法。请给一下例子,马上结贴给分。马上结贴给分。fangxinggood:太谢谢你了。 static void Main(){ var ret = Process(CheckInput1, CheckInput2, CheckInput3); Console.WriteLine("Return {0}", ret); Console.Read();}public static bool CheckInput1(){ Console.WriteLine("CheckInput1..."); return true;}public static bool CheckInput2(){ Console.WriteLine("CheckInput2..."); return true;}public static bool CheckInput3(){ Console.WriteLine("CheckInput3..."); return true;}public static TResult Process<TResult>(params Func<TResult>[] processes){ TResult local = default(TResult); foreach (var func in processes) { local = func(); if (local is bool) { var success = Convert.ToBoolean(local); if (!success) return local; } } return local;}你也可以这么写: bool result = Process<bool>(CheckInput1, CheckInput2);因为是参数数组。输出:CheckInput1...CheckInput2...CheckInput3...Return True----------------如果修改 CheckInput2 的返回值为:false,则输出:CheckInput1...CheckInput2...Return False 非常感谢:fangxinggood谢谢:dongxinxi 救命啊 快死人了!!!!!!!!! MachineKey 要怎么生成 一个数据库查询问题 |M| 如何复制Font 在线 初试AJAX就发生一个错误,烦劳各位帮忙~附完整代码...... 关于用数据绑定的问题(可以加分) 此 SqlParameterCollection 中未包含带有 ParameterName“@CustomerID”的 SqlParameter。 asp.net File.Create() 访问被拒绝 控 訴 滅 絕 人 性 中 國 吃 嬰 求webystyle3.0注册 大侠们急求解!!!! a标签调用js函数如何动态传递参数???
请各位兄弟告诉下判断方法。
local = logicProcess();
local = mainProcess();最后会覆盖第一个吧?你的3个方法返回3个boolpublic bool CheckMethod()
{
if (String.IsNullOrEmpty(this.TextBox1.Text.Trim()))
return false;
else
return true;
} public bool CheckLogicMethod()
{
if (this.TextBox1.Text.Trim().Length <=5)
return false;
else
return true;
}
public bool DataBindMethod()
{
this.TextBox1.Text = "数据处理OK,已经被插入到数据库中。";
return true;
}
}搞不懂 既然都有MainMethod()那就直接
local = mainProcess();得了呗
var result = Process<bool>(Check1, Check1, Check1);static bool Check1()
{
return false;
}public static TResult Process<TResult>(Func<TResult> inputProcess,
Func<TResult> logicProcess,
Func<TResult> mainProcess)
{
TResult local;
local = inputProcess();
if (local is bool)
{
var success = Convert.ToBoolean(local);
if (!success)
return default(TResult);
}
local = logicProcess();
local = mainProcess();
return local;
}
{
TResult local = default(TResult);
foreach (var func in processes)
{
local = func();
if (local is bool)
{
var success = Convert.ToBoolean(local);
if (!success)
return local;
}
}
return local;
}
Func<bool> logicProcess,
Func<bool> mainProcess) 为什么要用TResult,直接用bool不就好了。
public static TResult Process<TResult>(params Func<TResult>[] processes)
{
TResult local = default(TResult);
foreach (var func in processes)
{
local = func();
if (local is bool)
{
var success = Convert.ToBoolean(local);
if (!success)
return local;
}
}
return local;
}
fangxinggood:#8楼 的方法怎么被调用呢?也就是说我有多个方法需要传入的时候我怎么调用你写的方法。
请给一下例子,马上结贴给分。马上结贴给分。
fangxinggood:太谢谢你了。
如果类型确定,可以直接用Func<bool>,否则就按非哥说的先转换TResult为bool
然后可以直接进行逻辑运算
try
{
local = inputProcess() && logicProcess() && mainProcess();
}
catch (Exception ex)
{
local = false;
}
1,string method1,string method2,string method3
2,bool method1,bool method2,bool method3
以上两组都可以兼容的。fangxinggood:#8楼 的方法怎么被调用呢?也就是说我有多个方法需要传入的时候我怎么调用你写的方法。
请给一下例子,马上结贴给分。马上结贴给分。
fangxinggood:太谢谢你了。
{
var ret = Process(CheckInput1, CheckInput2, CheckInput3);
Console.WriteLine("Return {0}", ret);
Console.Read();
}public static bool CheckInput1()
{
Console.WriteLine("CheckInput1...");
return true;
}
public static bool CheckInput2()
{
Console.WriteLine("CheckInput2...");
return true;
}
public static bool CheckInput3()
{
Console.WriteLine("CheckInput3...");
return true;
}public static TResult Process<TResult>(params Func<TResult>[] processes)
{
TResult local = default(TResult);
foreach (var func in processes)
{
local = func();
if (local is bool)
{
var success = Convert.ToBoolean(local);
if (!success)
return local;
}
}
return local;
}你也可以这么写: bool result = Process<bool>(CheckInput1, CheckInput2);
因为是参数数组。
输出:
CheckInput1...
CheckInput2...
CheckInput3...
Return True
----------------
如果修改 CheckInput2 的返回值为:false,则输出:
CheckInput1...
CheckInput2...
Return False
谢谢:dongxinxi