Create a method, and pass in the variable parts as arguments.
Create the method as such, so that the method knows that T has those specific properties. Put a constraint on your generic type (define that T should inherit some kind of interface in which those properties are defined).
In C#, you can do it like this. (It can be done in VB.NET as well, but I don't know the syntax).
public string GetDesc<T> ( T obj ) where T : ISomeInterface
{
if( obj == null )
return String.Empty;
if( obj.abr == ... )
...
}
The interface 'ISomeInterface' should then define the abr and Desc properties.
You will also have to make sure that the types you use in your method call, implement this interface, otherwise you'll get a compile-error.
I believe that, in VB.NET, it would look something like ths:
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