2014-01-21 64 views
0

我有這個代碼;使用幫助器方法來創建「this」的實例

public static void SetMyClass (this myClass data, ListControl crl) 
{ 
    var value = crl.SelectedValue.ToNullableInt(); 

    if (value.HasValue) 
    { 
     data = new myClass() { Id = value.Value }; 
    } 
} 

此代碼不會更改新的原始實例。

可以這樣做嗎?

+1

我不認爲這是可能的。檢查這個問題和喬恩的答案:http://stackoverflow.com/questions/10967421/c-sharp-extension-method-for-setting-to-new-instance-if-null – MarcinJuraszek

回答

0

保持輔助我會用這個代替

public static T GetMyClass<T>(this ListControl data) where T : myClass, new() 
{ 
    var value = data.SelectedValue.ToNullableInt(); 

    if (value.HasValue) 
    { 

     return new T() { Id = value.Value }; 
    } 

    return null; 
} 
0

無法完成此操作,因爲您需要通過引用傳遞參數而不是要求使用ref關鍵字的值......並且擴展方法不支持第一個參數(實例參數)的ref

爲什麼不只是將data的屬性設置爲值?

1
public static void SetMyClass (ref myClass data, ListControl crl) 
{ 
    var value = crl.SelectedValue.ToNullableInt(); 

    if (value.HasValue) 
    { 
     data = new myClass() { Id = value.Value }; 
    } 
} 

你鬆開了擴展方法,但獲得了改變方法內部引用的能力。

與擴展方法相同是不可能的。