我在C#中编写了一个方法,它返回Type
并基于此类型(int或long)
private Type GetNumberColumnType(INumberedEntity entity)
{
var numberRow = SG.Framework.Numbering.NumberingService.NumberableEntities.Where(ne => ne.GetType().FullName == entity.ToString()).FirstOrDefault();
var row = (DataRow)numberRow;
return row.Table.Columns[numberRow.NumberColumnName].DataType;
}
我想得到:
GetNumberColumnType(INumberedEntity entity).MaxValue
而不是:
if( GetNumberColumnType(entity) == typeof(long))
long.MaxValue
else
int.MaxValue
我该怎么办?
答案 0 :(得分:6)
如果您不介意使用反射,请按照以下说明进行操作。
var type = GetNumberColumnType(entity);
FieldInfo fi = type.GetField("MaxValue");
if(fi!=null && fi.IsLiteral && !fi.IsInitOnly)
{
object value = fi.GetRawConstantValue();
}
正如评论中所指出的,反射是昂贵的,因为这些只是你可以进行查找的常量
internal class MaxValueCache
{
private static readonly Dictionary<Type, object> maxValues = new Dictionary<Type, object>()
{
{ typeof(int), int.MaxValue},
{ typeof(long), long.MaxValue}
//...
};
public static object GetMaxValue(Type type)
{
return maxValues[type];
}
}
然后使用
var type = GetNumberColumnType(entity);
object value = MaxValueCache.GetMaxValue(type);