背景
我有一个名为"object_model"
的字符串变量,它可以包含这两个值中的一个("UserImage"
,"CarImage"
),并在我的代码中使用它,如下所示:
switch (object_model)
{
case "UserImage":
{ UserImage.Add(img); break; }
case "CarImage":
{ CarImage.Add(img); break; }
}
问题:
我需要避免使用switch语句,只需这样做:
object_model.add(img)
注意:我使用constantize
(即model_object.constantize.add(img)
)
答案 0 :(得分:7)
Type t = Type.GetType(object_model);
MethodInfo method = t.GetMethod("Add", BindingFlags.Static | BindingFlags.Public);
method.Invoke(null, new object[] { img });
答案 1 :(得分:2)
似乎你的object_model
是一个字符串,在这种情况下你可以写一个扩展方法:
public static class Extensions
{
public static void Add(this string object_model, Img img)
{
switch (object_model)
{
case "UserImage":
{ UserImage.Add(img); break; }
case "CarImage":
{ CarImage.Add(img); break; }
}
}
}
你可以像"blabla".Add(img)
一样使用它
危险的是,您实际上允许对任何字符串进行此类调用,因此您自己有责任决定是否应添加此模型。
由于您的变量只能有两个值,因此最好将其定义为Enum
,并且可以在Enum上调用扩展方法而不是字符串。