2 Stimmen

Wie kann man ein Objekt in die generische Klasse des Elternteils von T umwandeln?

Das Hauptproblem bei dieser Frage besteht darin, dass wir T in eine Funktion übergeben und es verwenden, um ein Objekt wie die folgende Anweisung zu formen.

void SomeFunction<T> (object model)
{
    (SomeClass<T>)model;
}

Alles funktioniert einwandfrei. Aber ich möchte das Modellobjekt in ein generisches Klassenobjekt umwandeln, das ein Elternteil von T oder ein Großelternteil von T ist, je nachdem, was nicht leer ist. Wie das zu tun?

Aktualisiert # 1

Zum besseren Verständnis sehen Sie sich bitte das folgende Beispiel an.

public partial class SimpleUserInfo
{
    public string LogOnName { get;set; }
    public string HashedPassword { get;set; }
}

public partial class UserInfo : SimpleUserInfo
{
    pubic string Address { get;set; }
}

Nachdem ich einige Datenmodelle erstellt habe. Ich erstelle einige generische Klasse, die UserInfo Klasse als Parameter verwenden.

public class SimpleUserInfoValidator : IValidator<SimpleUserInfo>
{
    // logic to validate simple user info instance
}

Und dann füge ich der Klasse SimpleUserInfo ein Attribut hinzu.

[Validator(typeof(SimpleUserInfoValidator))]
public partial class SimpleUserInfo {}

Schließlich erstelle ich eine Funktion zum Abrufen des Validators in der gegebenen Klasse T.

public GetValidator<T> ()
{
    var attribute = (ValidatorAttribute)Attribute.GetCustomAttribute(type, typeof(ValidatorAttribute));

    if (attribute == null || attribute.ValidatorType == null)
        return null;

    var  (IValidator<T>)Activator.CreateInstance(attribute.ValidatorType);   
}

Diese Funktion funktioniert gut, wenn T SimpleUserInfo ist, aber das Problem wird auftreten, wenn T UserInfo ist. Wie lässt sich das Problem lösen?

PS. Um diese Frage zu lösen, ist es nicht erforderlich, neue Funktion von C# 4.0 zu verwenden. Aber ich sage Ihnen nur über ich werde diese Lösung in C# 4.0 anwenden.

Danke,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X