Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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#Actions解释成功/失败术语?_C#_.net_Visual Studio_Windows Phone 7_Parameters - Fatal编程技术网

用C#Actions解释成功/失败术语?

用C#Actions解释成功/失败术语?,c#,.net,visual-studio,windows-phone-7,parameters,C#,.net,Visual Studio,Windows Phone 7,Parameters,我在WindowsPhone7c#示例中找到了下面的方法。在其中,您可以看到方法中使用的术语成功和失败。我尝试用这两个术语来定义,VisualStudio并没有跳转到这两个术语的定义。我试着用“行动”、“成功”、“失败”、“C#”和“参数”搜索谷歌,但没有发现任何有用的东西。在这种情况下,成功和失败是宏还是类似的东西?我在哪里可以得到关于它们的用途和使用方法的解释?注意,将鼠标悬停在故障上方时,工具提示帮助将显示“参数操作故障” public void sendsync(字符串用户名、字符串消息

我在WindowsPhone7c#示例中找到了下面的方法。在其中,您可以看到方法中使用的术语成功和失败。我尝试用这两个术语来定义,VisualStudio并没有跳转到这两个术语的定义。我试着用“行动”、“成功”、“失败”、“C#”和“参数”搜索谷歌,但没有发现任何有用的东西。在这种情况下,成功和失败是宏还是类似的东西?我在哪里可以得到关于它们的用途和使用方法的解释?注意,将鼠标悬停在故障上方时,工具提示帮助将显示“参数操作故障”

public void sendsync(字符串用户名、字符串消息、操作成功、操作失败)
{
if(插座连接){
var formattedMessage=string.Format(“{0};{1};{2};{3};{4}”,
SocketCommands.TEXT、this.DeviceNameAndId、用户名、消息、日期时间.Now);
var buffer=Encoding.UTF8.GetBytes(formattedMessage);
var args=new SocketAsyncEventArgs();
args.RemoteEndPoint=this.IPEndPoint;
参数SetBuffer(缓冲区,0,缓冲区长度);
args.Completed+=(\uuu,e)=>{
Deployment.Current.Dispatcher.BeginInvoke(()=>{
如果(例如SocketError!=SocketError.Success){
失败(“无法发送您的邮件”);
}
否则{
成功();
}
});
};
socket.SendAsync(args);
}
}

它们是用作“回调函数”的委托。基本上,它们是提供给另一个函数的函数,可以在该函数内部调用。也许更小的样本更有意义:

static void PerformCheck(bool logic, Action ifTrue, Action ifFalse)
{
    if (logic)
        ifTrue(); // if logic is true, call the ifTrue delegate
    else
        ifFalse(); // if logic is false, call the ifFalse delegate
}
在下面的示例中打印False,因为
1==2
的计算结果为False。因此,
logic
PerformCheck
方法中为false。。因此它调用
ifFalse
委托。如您所见,
ifFalse
打印到控制台:

PerformCheck(1 == 2, 
            ifTrue: () => Console.WriteLine("Yep, its true"),
            ifFalse: () => Console.WriteLine("Nope. False."));
而这一条将是真的。。因为
1==1
的计算结果为true。因此它调用
ifTrue

PerformCheck(1 == 1, 
            ifTrue: () => Console.WriteLine("Yep, its true"),
            ifFalse: () => Console.WriteLine("Nope. False."));

您可以将
Action
(以及
Func
)视为包含其他方法的变量

您可以向
操作
传递、分配和执行任何与任何其他变量类似的操作,但也可以像方法一样调用它

假设代码中有两种方法:

public void Main(){
    Action doWork;
    doWork = WorkMethod;
    doWork();
}

private void WorkMethod(){
    //do something here
}
将WorkMethod分配给操作,就像分配给变量一样。然后,您可以像调用方法一样调用doWork。在本例中,它不是特别有用,但您可能可以看到标准变量的所有好处是如何应用的

您使用
操作
函数
的方式基本相同。唯一真正的区别是
操作
表示
无效
,而
函数
需要返回类型

您也可以使用泛型。例如,
Action
用签名表示方法

void方法名(int-arg){}

操作将是

void方法名(int arg1,字符串arg2){}

Func
与之类似,
Func
将是:

int-methodName(){}

Func
将是:

int方法名(字符串arg){}


重要的是要记住,
Func
定义中的最后一个类型是返回类型,即使它首先出现在实际的方法签名中。

可以理解,但是在回调中定义的匿名方法期间执行failure()或success()时执行的代码在哪里?除了尝试将“成功”和“失败”定义为“转到定义”之外,我还进行了完整的解决方案搜索,没有找到任何定义为“成功”或“失败”的函数/方法/等。那么当这些动作触发时会发生什么呢?它们是呼叫的一部分。转到此方法的调用站点(无论在何处调用),查看传入的内容。如果它们是直接向上的方法体。。伟大的如果没有,他们将是代表,您可以“转到定义”查看他们的实现/分配。很好的示例。如果在dotnetfiddle中创建并扩展,请点击此处:谢谢@GFoley83。很高兴看到近两年前我回答的问题仍然被人看到并对其他人有所帮助:)
public void Main(){
    Action doWork;
    doWork = WorkMethod;
    doWork();
}

private void WorkMethod(){
    //do something here
}