2017-05-03 78 views
0

所以,我有两种方法:我有两个功能只有一些条件不同。它可以统一吗?

public static string Figure2D() 
    { 
     dynamic shapeValue; 
     do 
     { 
      shapeValue = Presentation.Present(); 
     } 
     while (shapeValue.Is3D); 
     return shapeValue.ToString("R"); 
    } 

    public static string Figure3D() 
    { 
     dynamic shapeValue; 
     do 
     { 
      shapeValue = Presentation.Present(); 
     } 
     while (!shapeValue.Is3D); 
     return shapeValue.ToString("R"); 
    } 

它们之间唯一的区别是while条件。我怎样才能将这两个功能合并成一个功能?传递参数值可能需要&,但我确实希望保持简短。有任何想法吗?

+0

如何@stuartd出现了一个'!'在一个 – degant

+0

@stuartd一个被否定,另一种是不。 – Bytewave

+0

小文本再次获胜,对不起 – stuartd

回答

4

public static string Figure(Predicate<dynamic> p) 
    { 
     dynamic shapeValue; 
     do 
     { 
      shapeValue = Presentation.Present(); 
     } 
     while (p(shapeValue)); 
     return shapeValue.ToString("R"); 
    } 
+2

我建议'Func '而不是'Predicate',所以它可以简单地用作'figure(thing =>!thing.Is3D)' – quetzalcoatl

+0

嗯,什么是Predicate ,我将如何通过这个条件? (对不起,有点新C#) – Jesper

+1

@Jesper:它是一个委托,返回一个布尔(而不是Func,它返回任何你指定的)。基本上,Predicate === Func <..., bool> ..欲了解更多信息,请查看VS中的MSDN或intellisense。 – quetzalcoatl

相关问题