在我正在进行的项目中,(。net Core)我们使用范围滑块(noUiSlider)来表示产品过滤器的质量。
滑块返回数字数组作为示例如果滑块设置为良好且优秀,则会返回 [2,4] >我需要检索所有符合良好,非常好和质量优良的产品。
这就是一些独特的问题。 产品是从第三方服务中提取的,我只收到质量作为字符串值。所以我需要一种方法来为我收到的字符串值分配一个数字值,这样我就可以检查质量> =到qualityArray [0]和< =到qualityArray [1]
的所有产品将字符串映射到int之间的最佳方法是什么,这样我就可以执行> =和< =检查质量范围,同时将int映射到字符串,以便在显示产品列表时匹配范围我只需要显示字符串值? (非常好)
我想象使用Enum或词典,但我不确定两者的优点是什么。
答案 0 :(得分:0)
您需要使用Enum.Parse
将字符串值强制转换为枚举,然后在需要时使用Enum.ToString
然后你可以说
QualitiyValues.Low >= myObject.Quality <= QualityValues.Medium
。
答案 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;