2016-11-16 18 views
-2

申し訳ありませんが、私は最初の目標を説明する必要があります。 異なるクラスの異なるvoidを動的に呼び出す必要があります。C#voidをvoidに宣言する方法? 'void'を暗黙的に '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) 

暗黙的に '無効'

一つのエンティティにタイプ '無効' を変換できません:

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

1クラス:

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

1つのパブリッククラス:

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

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

値を返さないメソッドの値を別のメソッドに代入しようとしていますか? – Steve

+0

あなたはそれをすることはできません。 void型は値を返さないためです。 – Sean83

+0

なぜそれをしたいのですが、最初の目標は何ですか? – mybirthname

答えて

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 operatorおよびdocumentation reagarding C# statementsを超える。

ここでは、メソッドに値を代入しようとする以外に、void戻り値の型を割り当てようとする試みがあります。できません。返品はありません。それが空白の意味です。のように、あなたがプロパティに設定しようとした場合でも、これは動作しません:

obj.MyProperty = ad.WorkListVoid(); 

無効な結果はありません。それは戻り値なしの関数を実行するので、void戻り値の型を割り当てる方法はありません。 NULLのコンセプトとは異なるので、voidNULLを混同しないでください。

EDIT:あなたは完全に何かをしようとするかもしれない

- あなたは「私は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; 

は、これはあなたが実際にad.WorkListVoid()を呼び出すことになるmodel.AfterAuditVoid()を呼び出すことができます。私はthis to get more familiar with funcs and actions以上の読書をお勧めします。

+0

パブリックアクションAfterAuditVoid {get;セット; }デフォルトアクションを設定できますか? –

+0

c#-4.0を使用すると、コンストラクタまたはバッキングフィールドを使用する必要があります。 E.G: 'publicアクションAfterAuditVoid {get {return _myField ?? (_myField = MyDefaultAction); }セット{戻り_myField =値; }} ' –

0

あなたのメソッドが何も返さないという事実の後で、代入で戻り値の型を使うことができない場合でも、何かを返したとしても、どちらの値もrvaluesなので、間違っているでしょう。他の人に1つずつ割り当てると、両方ともこのように参照されず、他の参照を保持していなければ、garbadgeコレクションの対象となります。これは単に思考の間違った方法です。私はあなたの方法を次々と呼び出しの単純なにあなたを示唆

:逢引現在の瞬間のように

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

、再び、でも方法が戻ってくるには、起こったことはありません。

0

あなたの質問から、私はあなたのクラス機能に無効な関数の動作を割り当てたいと思っています。

あなたのアプローチは間違っています....おそらくdelegatesを使用するのが正しいアプローチです。このような変更を行うと、コードが動的に異なる関数を参照できるようになります... void型のものも含めます。

関連する問題