使用Range变量类型的结构

时间:2012-07-27 20:27:55

标签: c# dictionary struct variable-types

我正在尝试使用一些成员和一个方法来为范围变量(最小值,最大值)创建一个结构,以了解值之间。

现在我的结构看起来像这样:

public struct NumRange
{
    float maximum;
    float minimum;

    public NumRange(float min, float max) 
    {
        this.maximum = max;
        this.minimum = min;
    }

    public bool IsBetween(float value)
    {
        if (value < maximum && value > minimum)
            return true;

        return false;
    }
}

我希望能够通过

创建数字范围
NumRange test = new NumRange(15, 20);

制作这个范围变量类型的重点是制作一个地图密钥字典,如:

public Dictionary<NumRange, Color> mapKey = new Dictionary<NumRange, Color>();
NumRange test = new NumRange(15, 20);
mapKey.Add(test, Color.Orange);

这是最好的方法吗?当我尝试向mapKey添加内容时,它也不喜欢。说有无效的令牌,如','''''('

1 个答案:

答案 0 :(得分:2)

除非要查找有限数量的值,否则字典可能不是最佳选择。看起来您要将值范围映射到颜色以应用于高度贴图。这个类的存根将允许您这样做,但请注意它不适应从颜色A到颜色B的混合。

class RangeMap<T>
{
    private SortedList<float, T>  _values;

    public RangeMap()
    {
        _values = new SortedList<float, T>();
    }

    public void AddPoint(float max, T value)
    {
        _values[max] = value;
    }

    public T GetValue(float point)
    {
        if (_values.ContainsKey(point)) return _values[point];

        return (from kvp in _values where kvp.Key > point select kvp.Value)
               .FirstOrDefault();
    }
}   
var  map = new RangeMap<Color>();
map.AddPoint(0.0F, Color.Red);
map.AddPoint(0.5F, Color.Green);
map.AddPoint(1.0F, Color.Blue);

Console.WriteLine(map.GetValue(-0.25F).Name);
Console.WriteLine(map.GetValue( 0.25F).Name);
Console.WriteLine(map.GetValue( 0.75F).Name);
Console.WriteLine(map.GetValue( 1.25F).Name);

输出:红色,绿色,蓝色,空结构。