Как мне присвоить тип любого объекта для общего метода .NET?
Вопрос
Предположим, что я создал такой метод
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();
}