可以在 C# 中定义没有任何类型的 属性 吗?

Can define Property without any Type in C#?

我有三个继承自B模型的模型,每个模型都有一个属性叫做Id,每个类型都不一样

public class BaseModel
{
    string createTime;
}

public class IntValue:Base
{
    int Id;
}

public class LongValue:Base
{
    long Id;
}

public class ShortValue:Base
{
    short Id;
}

现在我想写一个通用函数,根据这三个模型对样本进行特殊操作。在此操作中,我会将 属性 Id 与定义为函数输入的另一个参数进行比较。所以我必须定义三个通用函数并在每个函数中进行比较。有没有办法可以将这三个通用函数变成一个函数? 我可以在 BaseModel 中定义没有任何类型的 Id 吗?

public void Get<T> (List<T> items,List<int> requestItem)where T : IntValue
{
    //Do Something ...

    items.where(x=> requestItem.Contains(x.id))

    //Do Something ...
}


public void Get<T> (List<T> items,List<long> requestItem)where T : LongValue
{
    //Do Something ...

    items.where(x=> requestItem.Contains(x.id))

    //Do Something ...
}

public void Get<T> (List<T> items,List<short> requestItem)where T : ShortValue
{
    //Do Something ...

    items.where(x=> requestItem.Contains(x.id))

    //Do Something ...
}

如果我理解正确,你可以这样做:

public class BaseModel<T>
{
    string createTime;
    T Id;

    public void Get (List<T> items, List<T> requestItem)
    {
        //Do Something ...

        items.where(x => requestItem.Contains(x.id))

        //Do Something ...
    }
}

那么您只需要使用正确的通用参数继承 BaseModel

public class ShortValue: BaseModel<short>
{
}

请注意,这可能不适用于非值类型,因此需要 IEqualityComparer<T> 或任何其他比较策略。