题
假设我创建了这样的方法
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
作为参数。类型推理将确定应有的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
将被打印到控制台。
编辑: 但是,是的,没有类型的推理,当您知道您的变量是什么时,您可以随时与该类型明确。 Test<string>(temp);
另一个选项是在计时器作业中编写清洁逻辑。
创建运行每日/每周/每月/每月(夜晚)的定时器作业,循环通过任务列表并删除取消工作流的孤立任务和任务。
1。)删除孤立任务
由工作流程创建的任务在列表项上启动了字段'workflowlistid',其中包含列表和字段'workflowitemid'的GUID,其中包含关联列表项的ID。
否则创建的任务(不是列表工作流)在“WorkFlowListId”和“WorkFlowIteMID”中具有空。
您可以使用这两个字段仅获取工作流任务,如果列表中没有具有该ID的项目(已删除该项目),则删除任务。
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();
}