gpt4 book ai didi

c# - 如何有效地检索具有与属性名称相似的命名字符串的特定类属性值

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:26 25 4
gpt4 key购买 nike

我有一个类结构的例子如下

public class ColorStuff
{
public Red Red { get; set; }
public Green Green { get; set; }
public Blue Blue { get; set; }
}

public class Red
{
public string Id { get; set; }
}

public class Green
{
public string Id { get; set; }
}

public class Blue
{
public string Id { get; set; }
}

我有如下方法通过下面的颜色名称检索颜色 Id

public string GetColorIdByName(string colorName)
{
var colorSettings = JsonConvert.DeserializeObject<ColorStuff>(content);
string colorId = string.Empty;
switch (colorName)
{
case "Red":
colorId = colorSettings.Red.Id;
break;
case "Green":
colorId = colorSettings.Green.Id;
break;
case "Blue":
colorId = colorSettings.Blue.Id;
break;
}

return colorId;
}

如您所见,我必须为每个颜色名称创建一个开关盒。无论如何我可以在没有多个 switch case 的情况下调用吗?

例如,如果我想检索“绿色”的颜色 ID,我会访问“绿色”类及其相关属性。除了保持单独的 switch case 之外,还有其他有效的方法来实现这一点吗?

最佳答案

您可以为此目的使用反射。例如,

var color = GetPropertyValue(colorSettings, colorName);
var id = GetPropertyValue(color, "Id");

或者

var id = GetPropertyValue(GetPropertyValue(colorSettings, colorName), "Id");

其中 GetPropertyValue 定义为

public object GetPropertyValue(object instance ,string propertyName)
{
var objType = instance.GetType();
var prop = objType.GetProperty(propertyName);
return prop.GetValue(instance, null);
}

关于c# - 如何有效地检索具有与属性名称相似的命名字符串的特定类属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58980314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com