Wie habe ich den Typ eines Objekts einer .NET -Generik -Methode zugewiesen?

StackOverflow https://stackoverflow.com/questions/2543085

  •  23-09-2019
  •  | 
  •  

Frage

Angenommen, ich habe eine solche Methode erstellt

private void Test<t>(t str)
{

}

Nun nenne ich es von einer anderen Methode

private void BtnClick()
{
    string a = "";


    test<Here I Want To assign The Type what ever the type of 'a' is>();
}

Wie kann ich das machen ?

Keine korrekte Lösung

Andere Tipps

Gut, wenn a ist eine Zeichenfolge, Sie können schreiben:

Test<string>(a);

Und wenn a ist ein int, Du kannst schreiben:

Test<int>(a);

Ganz schön offensichtlich. Wenn Sie die Art von nicht kennen a Vorab, das bedeutet das BtnClick sollte generisch sein, das Problem würde auf verschoben BtnClickAnrufer:

private void BtnClick<T>()
{
    T a = ...;


    Test<T>(a);
}

C# 2.0 und später bietet Inferenz vom Typ Typ, sodass Sie den Typ nicht angeben müssen:

Test(a);

Sie rufen einfach die Funktion Passing auf a als Parameter. Typ -Inferenz bestimmt, wofür t sein sollte a.

static void Main()
{
    string temp = "blah";
    Test(temp);
    Console.Read();
}

private static void Test<T>(T input)
{
    Console.WriteLine(typeof(T).ToString());
} 

System.String würde in die Konsole gedruckt werden.

Bearbeiten: Aber ja, fehlender Inferenz, und wenn Sie wissen, wie Ihre Variable Ihre Variable ist, können Sie mit dem Typ immer explizit sein. Test<string>(temp);

Eine andere Option besteht darin, die Reinigungslogik in einem Timer-Job zu codieren.

Erstellen Sie einen Timer-Job, der täglich / wöchentlich / monatlich (Nachtstunden) ausgeführt wird, Schleifen Sie mit der Aufgabenliste und löschen Sie Waisenaufgaben und Aufgaben der stornierten Workflows.

1.) Löschen Sie Waisenaufgaben

Tasks, die von Workflows erstellt wurden, die auf Listenelementen gestartet wurden, verfügen über Feld 'Workflowlistid', das die GUID der Liste und das Feld 'WorkflowItemid' enthält, das die ID des zugehörigen Listenelements enthält.

Aufgaben, die angenommen wurden, sonst (nicht durch Listen-Workflows) haben Null in 'Workflowlistid' und 'WorkflowitEmid'.

Sie können diese beiden Felder verwenden, um nur die Workflow-Aufgaben zu erhalten, und wenn es keinen Artikel mit dieser ID in der Liste gibt (der Artikel gelöscht wurde), dann löschen Sie die Aufgabe.

2.) Aufgaben von terminierten Workflows löschen

Sie können den Workflow-Status erhalten und wenn es vom Benutzer angehalten wird, löschen Sie dann die Aufgabe. generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top