将对象转换为泛型 T

Convert object to generic T

如何通过参数传递 T 但我需要这样做:

补充:我需要为每个 SqlServerTable 对象创建一个线程,它是一个数据表,但是进入我的方法 CheckChanges 我的数据表转换为我的对象继承自 IHasId

>     class Account: IHasId<int>
>     class Requisition: IHasId<int>
>     class EtcEtc: IHasId<int>

我需要通过参数传递那些 类 类型,例如:tableItem.TableType

及以下我从中传递了 T,当我调用该方法时我不能传递 T 因为它来自一个对象参数 dinamically

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 class Foo
{
}

还有一个class中的简单方法:

public class Bar
{
    public void DoSomething<T>()
    {
        Console.WriteLine(typeof(T).FullName);
    }
}

那你可以这样称呼它:

Foo foo = new Foo();

Type type = foo.GetType();

Bar bar = new Bar();

bar
    .GetType()
    .GetMethod("DoSomething")
    .MakeGenericMethod(type)
    .Invoke(bar, null);

您似乎想向通用方法提供T

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

无需类型声明,您可以通过传递类型来派生它。

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

如果您 只有 类型而不是类型的实例,那么这是 Calling generic method with a type argument known only at execution time 的副本。