C#如何将void声明为void?无法隐式转换类型' void'到'无效'

时间:2016-11-16 05:55:39

标签: c#

抱歉,我需要解释我的初步目标。 我需要动态调用不同类中的不同void。

public class WorkListEntity
{
  public string Formid { get; set; }
  public void AfterAuditVoid() {}
}

无法隐式转换类型' void'到'无效'

一个实体:

public class WorkListDal
{
   public void WorkListVoid()
   {
     //omit
   }
}

一类:

public class InitWorkListDal
{ 
   public class DoWork(WorkListEntity wf)
   {
     //omit

     //after all call the void.
     wf.AfterAuditVoid();
   }
}

一个公共课:

class PointClass {
    var x: Int = 0
    var y: Int = 0
    var z: Bool = false

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }

    func getBol() -> Bool {
        return true
    }

    func toString() -> String {

        if (z = getBol()) == true {//like objc

        }

        return "x=\(x), y=\(y)"
    }
}

3 个答案:

答案 0 :(得分:0)

事实上你的方法没有返回任何东西,所以你不能在赋值中使用它们的返回类型,即使它们会返回一些东西,这也是错误的,因为这两个值都是rvalues所以你不能彼此分配,这两个都将以这种方式未被引用,并且有资格获得garbadge,如果你没有,则持有其他引用。这只是思考的一种错误方式。

我建议您一个接一个地简单地调用您的方法:

public class CommandHandler : ICommand
{
    public event EventHandler CanExecuteChanged;

    private Action _action;

    public CommandHandler(Action action)
    {
        this._action = action;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        this._action();
    }
}

就像在当前时刻一样,分配,甚至方法都会返回,也不会发生。

答案 1 :(得分:0)

model.AfterAuditVoid() = ad.WorkListVoid();

这条线太错了。首先,您无法为方法指定值。

例如,这些都将无法构建:

object.Equals() = 0;
String.Join("") = 0;
Int32.Parse("") = 0;

在类级别,只能为可写字段和可设置属性分配值/引用:

public String MyProperty { get; set; }
...
obj.MyProperty = "MyValue";

我建议您阅读MSDN documentation regarding assignment operatordocumentation reagarding C# statements

现在,除了尝试为方法分配值之外,还有第二个谬误 - 您尝试分配void返回类型。你不能。没有回报。这就是无效的意思。就像在,即使你试图设置一个属性,这仍然不会起作用:

obj.MyProperty = ad.WorkListVoid();

Void根本没有结果。它执行一个没有返回的函数,因此无法分配void返回类型。它与NULL的概念不同,因此不要将voidNULL混淆。

编辑:

您可能正在尝试完全不同的其他事情 - 您可能会试图说"如果我致电AfterAuditVoid,那实际上应该调用WorkListVoid"。我们可以这样做:

public class WorkListEntity
{
  public string Formid { get; set; }
  //change to an action (e.g. in lambda terms, this would be () => {} - no parameters and no outputs
  public Action AfterAuditVoid { get; set; }
}

然后,你可以这样做:

var model = new WorkListEntity()
model.Formid="1";
model.AfterAuditVoid = ad.WorkListVoid;

这样您就可以拨打model.AfterAuditVoid(),这实际上会调用ad.WorkListVoid()。我建议阅读this to get more familiar with funcs and actions

答案 2 :(得分:0)

根据您的问题,我收集您要将void函数行为分配给您的类函数。

你的方法是错误的......也许使用delegates是正确的方法。如果你做了这样的修改......你可以让你的代码动态引用不同的函数......甚至是void类型的函数。