假设我创建了这样的方法

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top