Пожалуйста, помогите на VB.NET эквивалент этого из C#

Пожалуйста, помогите мне преобразовать этот кусок кода в C# в VB.NET

protected override object SetVal(ConventionInfo c)
{

    if (c.SourceProp.Type.IsValueType || c.SourceProp.Type == typeof(string)
        || c.TargetProp.Type.IsValueType || c.TargetProp.Type == typeof(string))
        return c.SourceProp.Value;

    //handle arrays
    if (c.SourceProp.Type.IsArray)
    {
        var arr = c.SourceProp.Value as Array;
        if (arr != null)
        {
            var clone = Activator.CreateInstance(c.TargetProp.Type, arr.Length) as Array;

            for (int index = 0; index < arr.Length; index++)
            {
                var a = arr.GetValue(index);
                if (a.GetType().IsValueType || a is string) continue;
                if (clone != null)
                    clone.SetValue(Activator.CreateInstance(c.TargetProp.Type.GetElementType()).InjectFrom<CloneInjection>(a), index);
            }
            return clone;
        }
    }

    //for simple object types create a new instace and apply the clone injection on it
    return Activator.CreateInstance(c.TargetProp.Type)
        .InjectFrom<CloneInjection>(c.SourceProp.Value);
}

1 ответ

Решение

С помощью этого собеседника http://converter.telerik.com/ вы можете сделать это самостоятельно

Protected Overrides Function SetVal(c As ConventionInfo) As Object
    If c.SourceProp.Type.IsValueType OrElse c.SourceProp.Type = GetType(String) OrElse c.TargetProp.Type.IsValueType OrElse c.TargetProp.Type = GetType(String) Then
        Return c.SourceProp.Value
    End If

    If c.SourceProp.Type.IsArray Then
        Dim arr = TryCast(c.SourceProp.Value, Array)
        If arr IsNot Nothing Then
            Dim clone = TryCast(Activator.CreateInstance(c.TargetProp.Type, arr.Length), Array)

            For index As Integer = 0 To arr.Length - 1
                Dim a = arr.GetValue(index)
                If a.[GetType]().IsValueType OrElse TypeOf a Is String Then
                    Continue For
                End If
                If clone IsNot Nothing Then
                    clone.SetValue(Activator.CreateInstance(c.TargetProp.Type.GetElementType()).InjectFrom(Of CloneInjection)(a), index)
                End If
            Next
            Return clone
        End If
    End If

    Return Activator.CreateInstance(c.TargetProp.Type).InjectFrom(Of CloneInjection)(c.SourceProp.Value)
End Function
Другие вопросы по тегам