Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# C如何将void声明为void?无法将类型“void”隐式转换为“void”_C# - Fatal编程技术网

C# C如何将void声明为void?无法将类型“void”隐式转换为“void”

C# C如何将void声明为void?无法将类型“void”隐式转换为“void”,c#,C#,对不起,我需要解释一下我最初的目标。 我需要动态调用不同类中的不同void WorkListDal ad = new WorkListDal(); var model = new WorkListEntity() model.Formid="WorkList"; model.AfterAuditVoid() = ad.WorkListVoid(); InitWorkListDal.DoWork(model) WorkListDal2 ad2 = new WorkListDal(); var m

对不起,我需要解释一下我最初的目标。 我需要动态调用不同类中的不同void

WorkListDal ad = new WorkListDal();
var model = new WorkListEntity()
model.Formid="WorkList";
model.AfterAuditVoid() = ad.WorkListVoid();
InitWorkListDal.DoWork(model)

WorkListDal2 ad2 = new WorkListDal();
var model = new WorkListEntity()
model.Formid="WorkList";
model.AfterAuditVoid() = ad2.OtherVoid();
InitWorkListDal.DoWork(model)
无法将类型“void”隐式转换为“void”

一个实体:

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

public class WorkListDal
{
   public void WorkListVoid()
   {
     //omit
   }
}
一个公共类:

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

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

由于您的方法不返回任何内容,因此您不能在赋值中使用其返回类型,即使它们会返回某些内容,这也将是错误的,因为这两个值都是右值,因此您无法将一个赋值给另一个,这两个值都将以这种方式取消引用,并符合garbadge收集的条件,如果你没有其他的参考资料。这只是一种错误的思维方式

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

 model.AfterAuditVoid();
 ad.WorkListVoid();
同样,在当前时刻,即使方法返回,也不会进行赋值

model.AfterAuditVoid() = ad.WorkListVoid();
那条线有太多问题了。首先,不能为方法赋值

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

object.Equals() = 0;
String.Join("") = 0;
Int32.Parse("") = 0;
在类级别,只能为可写字段和可设置属性分配值/引用:

public String MyProperty { get; set; }
...
obj.MyProperty = "MyValue";
我建议读一遍这本书和那本书

现在,除了试图给方法赋值之外,还有第二个谬误——你试图赋值一个void返回类型。你不能。没有回报。这就是空虚的含义。如中所示,即使尝试设置为属性,这仍然不起作用:

obj.MyProperty = ad.WorkListVoid();
空虚根本没有结果。它执行一个没有返回的函数,因此无法指定void返回类型。它不同于空的概念,所以不要混淆空和空

编辑:

您可能正在尝试完全其他的方法—您可能试图说,如果我调用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。我建议多读一读

根据您的问题,我推断您希望将void函数行为指定给类函数


你的方法是错误的……也许在这里使用是正确的方法。如果您进行了这样的修改…您可以使代码动态引用不同的函数…甚至是void类型的函数。

您试图为一个方法赋值,而该方法不向另一个方法返回值?您不能这样做。因为void类型不返回任何值。为什么要这样做,您的初始目标是什么?如何将AfterAuditVoid动态调用到不同的void?也许您可以解释一下您想要实现什么,因为您的代码试图做一些表面上不可能的事情。公共操作AfterAuditVoid{get;set;}可以设置默认操作吗?使用c-4.0,您必须使用构造函数或支持字段。例如:public Action AfterAuditVoid{get{return\u myField???\u myField=MyDefaultAction;}set{return\u myField=value;}}