Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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# 如何通过检查if语句添加到方法链中_C# - Fatal编程技术网

C# 如何通过检查if语句添加到方法链中

C# 如何通过检查if语句添加到方法链中,c#,C#,我不知道这方面的正确术语,但我有一个简单的C代码片段,它包含以下对象: camera.gameObject.transform.DOMove(target,3.0f) .SetEase(Ease.InOutQuad) .OnComplete(animation.FadeIn); camera.gameObject.transform.DOMove(target,3.0f) .SetEase(Ease.InOutQuad)

我不知道这方面的正确术语,但我有一个简单的C代码片段,它包含以下对象:

camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad)
.OnComplete(animation.FadeIn);
camera.gameObject.transform.DOMove(target,3.0f)                       
.SetEase(Ease.InOutQuad)            

  //the general idea
  if(visible == true){
  .OnStart(animation.FadeOut);
  }         

.OnComplete(animation.FadeIn);
camera.gameObject.transform.DOMove(target,3.0f).
    SetEase(Ease.InOutQuad)
    If(visible == true, value => value.OnStart(animation.FadeOut)).
    OnComplete(animation.FadeIn)
但我需要做的是根据以下特定条件向该链添加另一种方法:

camera.gameObject.transform.DOMove(target,3.0f)
.SetEase(Ease.InOutQuad)
.OnComplete(animation.FadeIn);
camera.gameObject.transform.DOMove(target,3.0f)                       
.SetEase(Ease.InOutQuad)            

  //the general idea
  if(visible == true){
  .OnStart(animation.FadeOut);
  }         

.OnComplete(animation.FadeIn);
camera.gameObject.transform.DOMove(target,3.0f).
    SetEase(Ease.InOutQuad)
    If(visible == true, value => value.OnStart(animation.FadeOut)).
    OnComplete(animation.FadeIn)
很明显,这是一个语法错误,但我不知道如何正确处理语法中类似的内容


我应该如何处理它?

您需要将整个块放在
语句中,如果
-
否则
语句,则无法将其分解:

if(visible == true){
  camera.gameObject.transform.DOMove(target,3.0f)                   
.SetEase(Ease.InOutQuad) .OnStart(animation.FadeOut).OnComplete(animation.FadeIn);
  }      
else {
  camera.gameObject.transform.DOMove(target,3.0f)                   
.SetEase(Ease.InOutQuad).OnComplete(animation.FadeIn);      
}   
警惕地:

var intermediateObject = camera.gameObject.transform.DOMove(target,3.0f)                   
    .SetEase(Ease.InOutQuad);

if (visible) {
    intermediateObject.OnStart(animation.FadeOut).OnComplete(animation.FadeIn);;
}
else {
    intermediateObject.OnComplete(animation.FadeIn);;
}

var
关键字意味着您自己不需要担心对象的类型,但在我看来,它的使用确实会妨碍可读性。

如果您想将所有内容都保存在一个链中,您可以尝试使用
如果
扩展:

internal static T If<T> (this T source, bool isTrue, Action<T> thenAction) {
    if (isTrue) {
        thenAction(source);
    }
    return source;
}
如果
OnStart
实际返回不同的
对象

internal static T If<T> (this T source, bool isTrue, Func<T, T> thenFunction) =>
    isTrue ? thenFunction(source) : source;
内部静态T If(此T源、布尔isTrue、函数)=>
是吗?函数(源):源;

是的,当我添加更多东西时,我可以看到这会变得多么混乱。如果我转换为对象-我是否需要将其转换回?我怎么知道要将其转换回什么类型。@WDUK:您需要查看对象返回的是什么类型。我会很快更新我的答案。啊,看来我不需要将它转换回原来的类型,这是非常方便的!谢谢-这非常有效。这是一个很好的答案,但是您的
If
的签名是错误的。
Action-thenAction
参数应为
Func-thenAction
@Enigmativity。如果它是相同的
对象
,则实际上不需要返回它。这就是我写评论的原因:“如果OnStart返回相同的摄影机对象,此扩展将起作用。”如果
OnStart
实际返回不同的
对象
,则整个定义应更改为
,您应始终假定生成器返回一个新引用。返回此
的构建器是一种懒惰的编程实践。此外,除非还有“else”选项,否则类型不能是