逆に(拡張)メソッドで統一すればいいだろ

static int Length<T>(this T v) where T:struct
{
if(v is int || v is double)
{
 return 1;
}
else if(v is Ixxx)
{
 return ((Ixxx)v).Length;
}
throw new NotSupportedException();
}