Как мне присвоить тип любого объекта для общего метода .NET?

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

  •  23-09-2019
  •  | 
  •  

Вопрос

Предположим, что я создал такой метод

private void Test<t>(t str)
{

}

Теперь из другого метода я называю его

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


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

Как я могу это сделать ?

Нет правильного решения

Другие советы

Ну если a это строка, вы можете написать:

Test<string>(a);

И если a является int, ты можешь написать:

Test<int>(a);

Достаточно очевидно. Если вы не знаете тип a заранее, это означает, что BtnClick должен быть общим, проблема будет перенесена на BtnClickАбонент:

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


    Test<T>(a);
}

C# 2.0, а затем предлагает вывод типа, поэтому вам не придется указывать тип:

Test(a);

Вы просто называете прохождение функции a как параметр. Вывод типа будет определять, что должно быть для 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 будет напечатан на консоли.

Редактировать: Но, да, отсутствие вывода типа, и когда вы знаете, какой ваш тип ваша переменная, вы всегда можете быть откровенны с типом. Test<string>(temp);

Другой вариант - кодировать логику очистки в задании таймера.

Создайте задание таймера, которая запускается ежедневно / еженедельно / ежемесячно (ночные часы), петля через список задач и удаление рабочих рабочей задачи и задачи отмененных рабочих процессов.

1.) Удалить задачи сирота

Задачи, созданные рабочими процессами, начаты на элементах списка, имеют поле «WorkflowlistIDIDIDID», который содержит GUID из списка и поля «WorkflowiteMID», который содержит идентификатор элемента связанного списка.

Задачи, созданные в противном случае (не по списку рабочие процессы) имеют NULL в «Workflowlistid» и «WorkFlowiteMID».

Вы можете использовать эти два поля, чтобы получить только задания рабочего процесса, и если нет элемента с этим идентификатором в списке (элемент был удален), затем удалите задачу.

2) Удалить задачи окончанных рабочих процессов

Вы можете получить статус рабочего процесса, и если он останавливается пользователем, то удалите задачу.

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();
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top