ich Aufruf möchte:C# generische Klasse als Parameter mit dem gleichen T wie genannt Methode der allgemeinen Klasse
Question<Entity> question =
Question<Entity>.Create(
Choice.Create().
AddFollowUpQuestion(Question.Create()).
AddFollowUpQuestion(Question.Create()),
Choice.Create()
);
Aber das beste C# ermöglicht es mir zu tun:
Question<Entity> question =
Question<Entity>.Create(
Choice<Entity>.Create().
AddFollowUpQuestion(Question<Entity>.Create()).
AddFollowUpQuestion(Question<Entity>.Create()),
Choice<Entity>.Create()
);
ich versuche zu Reinigen Sie einige Code, im Grunde nur syntaktischen Zucker hinzufügen, so dass einige Definitionen, die ich machen viel einfacher zu lesen sind.
Sowohl Intelisense als auch der Compiler wissen, dass sie erwarten, dass der Parameter vom Typ Choice ist, da es sich um eine Methode der generischen Klasse handelt. Aber ich muss immer noch den Typ von T für das übergebene Argument eingeben.
ein bisschen abstrakt: Ich versuche, eine Top-Level-generic-Klasse zu erstellen, in dem alle Eigenschaften, die auch generische Typen sind die gleiche Art von T. unter Verwendung
Kann mir jemand helfen, dieses Rätsel zu lösen? Oder erkläre mir wenigstens, warum ich den gleichen Typ immer wieder tippen muss?
Simplified Klassendefinitionen:
public class Question<T> where T : Entity
{
public static Question<T> Create(params Choice<T>[] choices)
{
return new Question<T>
{
Choices = choices
};
}
private Choice<T>[] Choices { get; set; }
}
public class Choice<T> where T : Entity
{
public static Choice<T> Create()
{
return new Choice<T>();
}
public Choice<T> AddFollowUpQuestion(Question<T> followUpQuestion)
{
FollowUpQuestions.Add(followUpQuestion);
return this;
}
private static List<Question<T>> FollowUpQuestions { get; set; }
}
public abstract class Entity
{
}
Was ist falsch mit derblinkenlight's Antwort? – nawfal
Zu schnell Kumpel, es ist Wochenende;) Ich habe gerade im Kommentar zu seiner Antwort geantwortet. –