如何映射int和属性c#

时间:2017-12-06 02:37:59

标签: c# dictionary enums

在我正在进行的项目中,(。net Core)我们使用范围滑块(noUiSlider)来表示产品过滤器的质量。

Slider

滑块返回数字数组作为示例如果滑块设置为良好优秀,则会返回 [2,4] >我需要检索所有符合良好,非常好和质量优良的产品。

这就是一些独特的问题。 产品是从第三方服务中提取的,我只收到质量作为字符串值。所以我需要一种方法来为我收到的字符串值分配一个数字值,这样我就可以检查质量> =到qualityArray [0]和< =到qualityArray [1]

的所有产品

将字符串映射到int之间的最佳方法是什么,这样我就可以执行> =和< =检查质量范围,同时将int映射到字符串,以便在显示产品列表时匹配范围我只需要显示字符串值? (非常好

我想象使用Enum或词典,但我不确定两者的优点是什么。

3 个答案:

答案 0 :(得分:0)

您需要使用Enum.Parse将字符串值强制转换为枚举,然后在需要时使用Enum.ToString

将枚举解析为字符串

然后你可以说 QualitiyValues.Low >= myObject.Quality <= QualityValues.Medium

Enum String Name from Value

答案 1 :(得分:0)

您可以在自己的类中封装评级:

public class Rating
{
    public int Value { get; }

    private readonly IDictionary<string, int> _asValue = new Dictionary<string, int>
    {
        {"One", 1},
        {"Two", 2},
        {"Three", 3},
        {"Four", 4},
        {"Five", 5},
    };

    public Rating(string rating)
    {
        Value = _asValue[rating];
    }

    public override string ToString()
    {
        return _asValue.First(pair => pair.Value == Value).Key;
    }
}

要比较评分,您只需要从每个评级中获取价值:

var r1 = new Rating("One");
var r2 = new Rating("Two");
var result = r1.Value > r2.Value;

答案 2 :(得分:0)

假设您的滑块是一个简单的数组,您可以尝试使用以下内容:

       // This will be what is returned by your slider
int[] ar = [2,4];
 Dictionary<int, string> test = new Dictionary<int, string>()
            {
                {1,"OK" },
                {2,"Good"},
                {3,"Very Good"},
                {4,"Excellent"}

            };

            List<string> choosenquality = new List<string>();
            for(int x =ar[0];x<=ar[1];x++)
            {
                choosenquality.Add(test[x]);
            }
//The following will be all the products that meet good, very good, and excellent
            IEnumerable<Productclass> tested = from x in myapps join y in choosenquality where x.Quality== y select x;