2014-01-21 92 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 }; 
    } 
} 

你松开了扩展方法,但获得了改变方法内部引用的能力。

与扩展方法相同是不可能的。