gpt4 book ai didi

c# - 在 C# 中获取动态类型的最大值

转载 作者:行者123 更新时间:2023-11-30 14:31:11 24 4
gpt4 key购买 nike

我用 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

我该怎么办?

最佳答案

如果您不介意使用反射,请按照以下方法进行操作。

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);

关于c# - 在 C# 中获取动态类型的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20920225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com