泛型类中的C#-特定类型方法声明

泛型类中的C#-特定类型方法声明,c#,generics,methods,C#,Generics,Methods,我正在尝试使用泛型类实现一个通用的“可变”方法,我不知道C#能否实现这一点。我将解释这种情况:我有一个类,它表示数据库中的一个实体,其属性用属性[PrimaryKey]和[Field]标记。例如: public class Car :TableEntity { [Field] [PrimaryKey] public string RegNumber{get;set;} [Field] pub

我正在尝试使用泛型类实现一个通用的“可变”方法,我不知道C#能否实现这一点。我将解释这种情况:我有一个类,它表示数据库中的一个实体,其属性用属性[PrimaryKey]和[Field]标记。例如:

    public class Car :TableEntity
    {
         [Field]
         [PrimaryKey]
         public string RegNumber{get;set;}
         [Field]
         public string Color{get;set;}
    }
我试图实现的是,通过使用TableEntity类实例化泛型类,.GetOne()方法会自动将其参数更改为主键的参数,但我一直无法找到一种优雅的方法来实现这一点

例如,我有:

public class BusinessObject<T> where T:TableEntity
{
public T GetOne(); //this is the method to modify depending on which type is T
}
有没有办法或解决办法来实现这一点?我知道使用System.Reflection可以提取标记为[PrimaryKey]的参数名和类型,但我不知道是否可以修改“on the air”的方法声明


多谢各位

您必须添加一个通用参数并传播它:

public abstract class TableEntity<TKey>
{
}

public class BusinessObject<TEntity, TKey>
    where T : TableEntity<TKey>
{
    public TEntity GetOne(TKey key)
    {
        // ...
    }
}
公共抽象类TableEntity
{
}
公共类BusinessObject
其中T:TableEntity
{
公共TEntity GetOne(TKey)
{
// ...
}
}
C#从CLR的角度来看是静态类型语言,因此它肯定不允许动态更改,但如果您从.Net4.0开始接触DLR,您必须牺牲intellisense奢华

作为替代方案,您可以修改核心类/接口以接受泛型参数以及其他参数

BO.GetOne(string RegNumber);
public abstract class TableEntity<TKey>
{
}

public class BusinessObject<TEntity, TKey>
    where T : TableEntity<TKey>
{
    public TEntity GetOne(TKey key)
    {
        // ...
    }
}