【问题标题】:Create a variable that contains an action [duplicate]创建一个包含动作的变量[重复]
【发布时间】:2020-09-07 23:28:06
【问题描述】:

我正在尝试做一个变量,当我调用它时,它会执行代码。

例如


string path1;
string path2;

bool check;

var make;// the variable in case

//other code

if(check == false)
{
 make = File.Copy(path1, path2); // the thing impossible to do
}
else
{
 make = File.Move(path1, path2);
}

make;//and here it should to run some code

这不会运行 make 中包含的代码。

但代码不得使用内部编译器,如 Roslyn,因为它太慢了。

我尝试过这样但不起作用:

Action make = File.Copy(path1, path2);

想将函数用作:

public void main()
{
  make();
}


public void make()
{
 if(check == false)
 {
  make = File.Copy(path1, path2);
 }
 else
 {
  make = File.Move(path1, path2);
 }
}

可以这样做吗?谢谢

【问题讨论】:

标签: c# wpf function variables var


【解决方案1】:

你们离得太近了。这只是语法正确的问题。

这里是:

Action make;

if (check == false)
{
    make = () => File.Copy(path1, path2);
}
else
{
    make = () => File.Move(path1, path2);
}

make();

Action(与Action<T>Action<T1, T2> 相对)不带任何参数,因此您必须使用() => 用空参数指示这一点。

【讨论】:

    【解决方案2】:

    我认为您需要的是利用代表的力量,您的目标可以使用以下代码轻松实现:

    string path1;
    string path2;
    
    bool check;
    
    Action make = null;// the variable in case
    
    //other code
    
    if(check == false)
    {
     make = () => File.Copy(path1, path2); // the thing impossible to do
    }
    else
    {
     make = () => File.Move(path1, path2);
    }
    
    make();//and here it should to run some code
    

    【讨论】:

      【解决方案3】:

      我认为您可以通过使用委托来解决它,委托可以引用方法 这是一个关于使用代表的链接https://www.bing.com/videos/search?q=c%23+delegate&docid=608021580906889596&mid=8AA2F8B388EE3F6D24718AA2F8B388EE3F6D2471&view=detail&FORM=VIRE

      【讨论】:

      • 请不要发布“仅链接”的答案。将突出内容放入您的答案中,并仅提供支持证据的链接。
      猜你喜欢
      • 2011-02-20
      • 2016-02-29
      • 2014-04-13
      • 1970-01-01
      • 2016-01-24
      • 2019-05-31
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多