我有一个这样的类,有一些自定义属性。我不确定我是否真的必须实现这些。
[AttributeUsage(AttributeTargets.Field)]
private class IsValue : Attribute { }
[AttributeUsage(AttributeTargets.Field)]
private class IsRep : Attribute { }
[AttributeUsage(AttributeTargets.Class)]
private class IsConstant : Attribute { }
public static class Constants
{
[IsConstant]
public static class EulerGamma
{
[IsValue]
public const double Value = 0.5772156649015;
[IsRep]
public const string Str = "γ";
}
[IsConstant]
public static class EulerNumber
{
[IsValue]
public const double Value = 2.718281828459;
[IsRep]
public const string Str = "e";
}
[IsConstant]
public static class Pi
{
[IsValue]
public const double Value = 3.1415926535898;
[IsRep]
public const string Str = "π";
}
[IsConstant]
public static class GoldenRatio
{
[IsValue]
public const double Value = 1.6180339887499;
[IsRep]
public const string Str = "φ";
}
}
假设这是在某个类“MyMathClass”中,我想在其中实现这样的方法:
string ValueOrString(double x)
如果传递的数字等于常量,则此方法将返回常量的字符串表示,否则它将返回原始数字。
所以,如果我完全通过3.1415926535898这个方法会给我字符串“π”。
如果传递例如2.5315621321,这将返回“2.5315621321”(字符串)。
你能帮帮我吗?
答案 0 :(得分:1)
我会创建一个使用字典的类:
public static class Constants
{
static Dictionary<double, string> constantNames;
static Constants()
{
Constants.constantNames = new Dictionary<double, string>();
Constants.constantNames.Add(3.1415926535898, "π");
Constants.constantNames.Add(2.718281828459, "e");
}
public static string ValueOrString(double value)
{
if (constantNames.ContainsKey(value))
{
return constantNames[value];
}
else
{
return value.ToString();
}
}
}
调用函数string ValueOrString(double value)
时,可以检查字典中是否存在提供的值。如果存在,则从中检索常量的名称。否则,将值作为字符串返回。