gpt4 book ai didi

c# - 检测泛型参数的 MaxValue

转载 作者:太空狗 更新时间:2023-10-29 18:15:00 25 4
gpt4 key购买 nike

我想编写应该与 byteushort 类型一起工作的通用类。我应该为这个类使用什么约束?如何检测此类中的 MaxValue 属性?

class MyClass<T>   // where T: ???
{
void Foo()
{
int maxValue = T.MaxValue; // how can I do this?
}
}

如果类是使用不包含 MaxValue 属性的意外类型创建的,我不在乎 - 例如,我可以在运行时抛出异常。

最佳答案

一种方法是利用新的 dynamic 关键字:

void Main()
{
Test(10);
Test(10.234);
Test((Byte)42);
Test(true);
}

public void Test<T>(T value)
where T : struct
{
T maxValue = MaxValue((dynamic)value);
maxValue.Dump();
}

public int MaxValue(int dummy)
{
return int.MaxValue;
}

public double MaxValue(double dummy)
{
return double.MaxValue;
}

public byte MaxValue(byte dummy)
{
return byte.MaxValue;
}

public object MaxValue(object dummy)
{
// This method will catch all types that has no specific method
throw new NotSupportedException(dummy.GetType().Name);
}

或者,您可以使用反射来获取 MaxValue 字段:

void Main()
{
Test(10);
Test(10.234);
Test((Byte)42);
Test(true);
}

public void Test<T>(T value)
where T : struct
{
FieldInfo maxValueField = typeof(T).GetField("MaxValue", BindingFlags.Public
| BindingFlags.Static);
if (maxValueField == null)
throw new NotSupportedException(typeof(T).Name);
T maxValue = (T)maxValueField.GetValue(null);
maxValue.Dump();
}

可以通过LINQPad测试这两个程序.

关于c# - 检测泛型参数的 MaxValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180674/

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