C#Variable = new function(){};
在C#中可以创建一个新的函数来定义一个变量?
我知道
string getResult() {
if (a)
return "a";
return "b";
}
String result = getResult();
是可能的,但我正在寻找类似的东西
String result = new string getResult() {
if (a)
return "a";
return "b";
}
这可能吗? 如果是这样,有人会证明吗?
编辑它是可能的
编辑:最终 - 解决方案
这是我一起野蛮攻击的最终结果
Func<string> getResult = () =>
{
switch (SC.Status)
{
case ServiceControllerStatus.Running:
return "Running";
case ServiceControllerStatus.Stopped:
return "Stopped";
case ServiceControllerStatus.Paused:
return "Paused";
case ServiceControllerStatus.StopPending:
return "Stopping";
case ServiceControllerStatus.StartPending:
return "Starting";
default:
return "Status Changing";
}
};
TrayIcon.Text = "Service Status - " + getResult();
定义这种功能的一种方法是:
Func<bool, string> getResult = ( a ) => {
if (a)
return "a";
return "b";
}
然后你可以调用: string foo = getResult( true );
。 作为一个委托,它可以在需要时被存储/传递和调用。
例:
string Foo( Func<bool, string> resultGetter ){
return resultGetter( false );
}
你也可以关闭范围内的变量:
bool a = true;
Func<string> getResult = () => {
if (a)
return "a";
return "b";
}
string result = getResult();
你想使用内联if语句。
string result = a ? "a" : "b";
如果你真的想要内联,你可以为String
类型创建一个扩展方法:
static class StringExtensions {
public static string ExecuteFunc(
this string str,
Func<string, string> func
) {
return func(str);
}
}
然后,当你想使用它时,你会这样做:
string str = "foo";
string result = str.ExecuteFunc( s => {
switch(s){
case "a":
return "A";
default:
return "B";
}
}
);
链接地址: http://www.djcxy.com/p/51091.html