我得到了那行代码而且它重复了很多次
myString = If(myObj1.myProp Is Nothing, "", If(want = "abr", myObj1.myProp.abr, myObj1.myProp.desc))
第x行 n ,只需将“ myObj1 ”更改为“任何”和“ myProp ”即可“的任何”
我试过这个
Public Function getDesc(Of t)(ByVal obj As t) As String
Return If(obj Is Nothing, "", If(want = "abr", obj.abr, obj.Desc))
End Function
这里的问题是 t 不知道它有 abr / desc 属性
答案 0 :(得分:4)
创建一个方法,并将变量部分作为参数传递。
创建方法,以便方法知道T具有那些特定属性。对您的泛型类型设置约束(定义T应该继承某种定义了这些属性的接口)。
在C#中,你可以这样做。 (它也可以在VB.NET中完成,但我不知道语法)。
public string GetDesc<T> ( T obj ) where T : ISomeInterface
{
if( obj == null )
return String.Empty;
if( obj.abr == ... )
...
}
接口'ISomeInterface'应该定义abr和Desc属性。 您还必须确保在方法调用中使用的类型实现此接口,否则您将收到编译错误。
我相信,在VB.NET中,它看起来像是:
Public Function getDesc(Of t As ISomeInterface )(ByVal obj As t) As String
Return If(obj Is Nothing, "", If(want = "abr", obj.abr, obj.Desc))
End Function
答案 1 :(得分:1)
您可以为所有具有缩写和描述的类创建一个界面,例如:
Public Interface IObjectWithDescription
Property Abreviation As String
Property Description As String
End Interface
然后为具有这些属性的所有对象实现该接口。然后你可以:
Public Function getDesc(ByVal obj As IObjectWithDescription, want As String) As String
Return If(obj Is Nothing, "", If(want = "abr", obj.Abreviation, obj.Description))
End Function
我建议您找到一个更好的界面名称,但我不知道有关您的问题的足够详细信息,以找到一个; - )
答案 2 :(得分:0)
方法是要走的路。然后,您可以使用方法名称替换程序中的这行代码并传入相关参数。同样意味着如果您需要在将来的某个时间更改此行代码,您只需在方法内更改它,而不是在代码中出现该行的每个位置。