オブジェクトのタイプを.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 パラメーターとして。タイプの推論は、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つの選択肢は、タイマージョブでクリーニングロジックをコーディングすることです。

毎日/毎週/毎月(夜間)を実行するタイマージョブを作成し、タスクリストをループし、キャンセルされたワークフローの孤立タスクとタスクを削除します。

1)孤立タスクを削除

リスト項目で開始されたワークフローによって作成されたタスクは、リストのGUIDと、関連するリスト項目のIDを含む 'workflowItemid'のGUIDを含むフィールド 'workflowlistid'です。

それ以外の場合(リストワークフローではない)「WorkflowListID」と 'workflowItemid'にNULLがあります。

これら2つのフィールドを使用してワークフロータスクのみを取得でき、リスト内の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