Pregunta

Supongamos que he creado un método como este

private void Test<t>(t str)
{

}

Ahora de otro método lo llamo

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


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

Cómo puedo hacer esto ?

No hay solución correcta

Otros consejos

Bueno, si a es una cadena, puedes escribir:

Test<string>(a);

Y si a es un int, puedes escribir:

Test<int>(a);

Bastante obvio. Si no conoce el tipo de a por adelantado, eso significa que BtnClick Debería ser genérico, el problema se trasladaría a BtnClickLa persona que llama:

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


    Test<T>(a);
}

C# 2.0 y posterior ofrece inferencia de tipo, por lo que no tendrá que especificar el tipo:

Test(a);

Simplemente llamas a la función pasando a como el parámetro. La inferencia de tipo determinará para qué debería ser t 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 se imprimiría en la consola.

Editar: Pero sí, la inferencia de tipo ausente, y cuando sepa cuál es su tipo de variable, siempre puede ser explícito con el tipo. Test<string>(temp);

Otra opción es codificar la lógica de limpieza en un trabajo de temporizador.

Crear un trabajo de temporizador que se ejecute diariamente / semanalmente / mensualmente (horas nocturnas), bucle a través de la lista de tareas y eliminar tareas y tareas de orfan de flujos de trabajo cancelados.

1.) Eliminar tareas huérfanas

Las tareas creadas por los flujos de trabajo iniciados en los elementos de la lista tienen el campo 'Workflowlistid' que contiene el GUID de la lista y el campo 'workflowitemid' que contiene la ID del elemento de la lista asociada.

Tareas creadas de otra manera (no por los flujos de trabajo de la lista) tienen nulos en 'workflowlistid' y 'workflowitemid'.

Puede usar estos dos campos para obtener solo las tareas de flujo de trabajo y si no hay un elemento con ese ID en la lista (el artículo se ha eliminado), luego elimine la tarea.

2.) Eliminar tareas de flujos de trabajo terminados

Puede obtener el estado del flujo de trabajo y, si está detenido por el usuario, luego elimine la tarea.

int id = Convert.ToInt32(taskItem[SPBuiltInFieldId.WorkflowItemId]);
SPListItem item = list.GetItemById(id);

string workflowInstanceId = taskItem[SPBuiltInFieldId.WorkflowInstanceID].ToString();
SPWorkflow workflow = item.Workflows[new Guid(workflowInstanceId)];
If (workflow.StatusValue = SPWorkflowStatus.StoppedByUser)
{
    taskItem.Delete();
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top