C# 如何从ARGB中删除重复字符

C# 如何从ARGB中删除重复字符,c#,selenium-webdriver,argb,C#,Selenium Webdriver,Argb,我试图得到十六进制格式的rgb颜色 public string GetCssValue(IWebElement iwe, string cssValue) { var value = iwe.GetCssValue(cssValue); string[] numbers = value.Replace("rgba(", "").Replace(")", "").Split(","); int a = int.Parse(numbers[0]); int r =

我试图得到十六进制格式的rgb颜色

public string GetCssValue(IWebElement iwe, string cssValue)
{
    var value = iwe.GetCssValue(cssValue);
    string[] numbers = value.Replace("rgba(", "").Replace(")", "").Split(",");

    int a = int.Parse(numbers[0]);
    int r = int.Parse(numbers[1]);
    int g = int.Parse(numbers[2]);
    int b = int.Parse(numbers[3]);

    Color myColor = Color.FromArgb(a, r, g, b);

    string hex = "#" + myColor.A.ToString("X2") + myColor.R.ToString("X2") + 
        myColor.G.ToString("X2") + myColor.B.ToString("X2");
这里hex是获取值#ffeee01,而我在页面上的css是#fee,这样我就可以比较两个字符串(预期、实际)

我如何才能将#费用作为我的十六进制值。
这个X2在这里代表什么

更改代码以返回值的快速方法是只将
RGB
值中的第一个字符连接起来:

string hex = "#" + myColor.R.ToString("X2")[0] + myColor.G.ToString("X2")[0] + 
    myColor.B.ToString("X2")[0];

但是,由于只有6位代码的子集可以准确地转换为3位代码(只有那些具有重复字符的代码),因此编写一个帮助器方法来转换值可能会有所帮助:

public string GetThreeDigitRGB(Color color)
{
    // Get the 2-character RGB color codes
    var r = color.R.ToString("X2");
    var g = color.G.ToString("X2");
    var b = color.B.ToString("X2");

    // Every color must have a repeating character for its code, otherwise we return null
    return r[0] == r[1] && g[0] == g[1] && b[0] == b[1]
        ? $"#{r[0]}{g[0]}{b[0]}"
        : null;
}
然后可以修改原始代码,从输入创建一个
Color
对象,并将其传递给上面的帮助器方法,以获得3位代码(还请注意,我们以RGBA顺序获取颜色值的更改,这就是它们的传递方式):


.Split(“,”)
是否编译?没有一个重载可以接受单个字符串参数。我不确定开箱即用的
ToString
是否能够做到这一点。看起来CSS使用的3位RGB格式是“特殊”的。在比较期间,你会考虑把“费”的价值扩大到更长的时间里吗?似乎比试图用另一种方式做要容易一些。但也许这没关系…而且,我可能会错过一些东西。。。给出您得到的#ffeee01值的
颜色是淡黄色(a:255,R:238,G:238,B:1)。那是一种超浅粉色/红色。它们应该是一样的吗?或者只是两个不同的例子?
public string GetCssValue(IWebElement iwe, string cssValue)
{
    var value = iwe.GetCssValue(cssValue);
    string[] numbers = value.Replace("rgba(", "").Replace(")", "").Split(",");

    // Note the change to get the colors in the correct order
    int r = int.Parse(numbers[0]);
    int g = int.Parse(numbers[1]);
    int b = int.Parse(numbers[2]);
    int a = int.Parse(numbers[3]);

    // Create a color from the values
    Color myColor = Color.FromArgb(a, r, g, b);

    // Call our helper method to get the three digit code from the color
    return GetThreeDigitRGB(myColor);
}