如何将字符串转换为对象的定义

How to transform a string to a Definition of an Object

我想避免 copy/pasting 4 次相同的操作,只改变字节(x0.Rx0.G 等每种颜色)。
我不确定在 C# (.NET 3) 中是否可行,但我知道不同语言中存在类似的东西(ruby 使用方法 "something".to_sym)。

我这里的代码有一个本地方法Blend(string color)x0x1Color 对象,当我调用 x0.R 对应于红色,x0.G 对应于绿色等时 return 一个字节
我试图让 x0.color 工作成为可能,其中 color 是一个字符串,可以是 "R""G""B""A".

在 C# 中有没有办法将 x0."R" 转换为 x0.R

private static Color Interpolate(Color x0, Color x1, float alpha)
    {
        float Blend(string color)
        {
            float z = (float) x0.color / 255 * (1- alpha) + alpha * (float) x1.color / 255; 
            return z;
        }
        // float r = (float) x0.R / 255 * (1- alpha) + alpha * (float) x1.R / 255;
        

        return new Color(Blend("R"),Blend("G"),Blend("B"),Blend("A"));
    } 

编辑:我找到了一种方法,完全按照我从对象 Color(Xna,而不是 System.Drawings)中写的内容进行插值 2 种颜色:

private static Color Interpolate(Color x0, Color x1, float alpha)
{
    return Color.Lerp(x0,x1,alpha);
}

我认为最接近的是这样的:

private static Color Interpolate(Color x0, Color x1, float alpha)
{
    float Blend(Func<Color, byte> componentSelector)
    {
        float z = (float) componentSelector(x0) / 255 * (1 - alpha)
            + alpha * (float) componentSelector(x1) / 255; 
        return z;
    }

    return new Color(
        Blend(x => x.R),
        Blend(x => x.G),
        Blend(x => x.B),
        Blend(x => x.A));
}

至少我不知道 select a 属性 的委托的更短形式。像 Blend(_.R).

这样的东西会很好

所以我认为这是你最好的选择,除非你想开始反思,但这只会增加复杂性而收效甚微。