C# 将对象转换为泛型T

C# 将对象转换为泛型T,c#,generics,generic-handler,C#,Generics,Generic Handler,如何通过参数传递T,但我需要执行以下操作: 添加:我需要为每个SqlServerTable对象创建一个线程,它是一个Datatable,但在我的方法CheckChanges中,我的Datatable转换为从IHasId继承的对象 我需要按参数类型传递这些类,例如:tableItem.TableType 下面我通过它传递T,当我调用这个方法时,我不能传递T,因为它来自一个对象参数 public static void Start() { SqlServerTables.ForEach(ta

如何通过参数传递T,但我需要执行以下操作:

添加:我需要为每个SqlServerTable对象创建一个线程,它是一个Datatable,但在我的方法CheckChanges中,我的Datatable转换为从IHasId继承的对象

我需要按参数类型传递这些类,例如:tableItem.TableType

下面我通过它传递T,当我调用这个方法时,我不能传递T,因为它来自一个对象参数

public static void Start()
{
    SqlServerTables.ForEach(tableItem =>
    {
        T t = (T)tableItem.TableType; // <- THIS IS WHAT I NEED WORKING.. :(
        var destinationTable = SqlServerDb.LoadDestination(tableItem.Table.TableName, tableItem.Table.PrimaryKey[0].ColumnName, false);
        // HOW CAN I GET THE <T> below?
        var thread = new Thread(() => SincronizeTable<T>(destinationTable)) { Name = tableItem.Table.TableName };
        thread.Start();
    });
}

private static void SincronizeTable<T>(DataTable sqlServerTable)
{
    var tableName = sqlServerTable.TableName;
    var primaryKey = sqlServerTable.PrimaryKey[0].ColumnName;

    while (_isAlive)
    {
        var sourceTable = TaskDb.LoadDataFromTask(tableName, primaryKey, true, false);
        var destinationTable = SqlServerDb.LoadDestination(tableName, primaryKey, false);

        var differences = Migration.CheckChanges<T>(sourceTable, destinationTable, false, primaryKey);

        // Save changes
        var success = Migration.SaveChanges(differences, tableName, primaryKey, Program.ArgumentParams.BatchUpdateQuantity);

        Thread.Sleep(1000);
    }
}
}

听起来像是要动态调用泛型方法

public void MyMethod<T>(Class1 myClass)
{
}
以下是方法:

从简单类型开始:

public class Foo
{
}
以及类中的一个简单方法:

public class Bar
{
    public void DoSomething<T>()
    {
        Console.WriteLine(typeof(T).FullName);
    }
}
似乎您希望为泛型方法提供T

public void MyMethod<T>(Class1 myClass)
{
}
不需要类型声明,您可以通过传递类型来派生它

public void MyMethod<T>(Class1 myClass, T someClass)
{
}

如果您只有该类型而没有该类型的实例,那么这是的副本。

type t=typeofT?你的问题一点也不清楚。你不是说t=TmyObject;?泛型是编译时特性。您不能动态地执行此操作。我看不出分配变量t会起什么作用,您没有使用它。@RogerOliveira-您可以使用@messaging符号来明确您正在回复谁并发出通知吗?我认为他在运行时没有。他只有tableItem.TableType——我想是System.Type。是的,我不确定,我不知道tableItem.Table是什么。它似乎是tableItem.TableType的一个实例,但我不知道。@ErikPhilips实际上代码还没有完成,我可能做错了,基本上我需要将类类型发送到我的方法CheckChanges,而棘手的是,我可以在哪里存储此类类型?我可以在SqlServerTable对象中创建一个属性,使其具有类类型。。那是我的主意。你觉得怎么样?你为什么要通过考试?为什么不能传递实例?下面是一个版本的调用行,它避免了神奇的字符串Actionbar.DoSomething.Method.GetGenericMethodDefinition.MakeGenericMethodtype.Invokebar,null;将Action替换为指定正确方法重载所需的任何Action、Action、Func等。还要注意,指定的类型将被丢弃,只需要匹配方法约束。
public void MyMethod<T>(Class1 myClass, T someClass)
{
}