可以在 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>
或任何其他比较策略。
我有三个继承自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>
或任何其他比较策略。