オブジェクトのタイプを.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
パラメーターとして。タイプの推論は、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つの選択肢は、タイマージョブでクリーニングロジックをコーディングすることです。
毎日/毎週/毎月(夜間)を実行するタイマージョブを作成し、タスクリストをループし、キャンセルされたワークフローの孤立タスクとタスクを削除します。
リスト項目で開始されたワークフローによって作成されたタスクは、リストのGUIDと、関連するリスト項目のIDを含む 'workflowItemid'のGUIDを含むフィールド 'workflowlistid'です。
それ以外の場合(リストワークフローではない)「WorkflowListID」と 'workflowItemid'にNULLがあります。
これら2つのフィールドを使用してワークフロータスクのみを取得でき、リスト内のID内のアイテムがない場合(アイテムが削除されました)、タスクを削除します。
ワークフローステータスを取得でき、ユーザーが停止してからタスクを削除できます。
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();
}
.