C# 按字符串类名称访问类方法
背景: 我有一个名为C# 按字符串类名称访问类方法,c#,.net,C#,.net,背景: 我有一个名为“object\u model”的字符串变量,它可以有这两个值(“UserImage”,“CarImage”)中的一个,并在我的代码中使用它,如下所示: switch (object_model) { case "UserImage": { UserImage.Add(img); break; } case "CarImage":
“object\u model”
的字符串变量,它可以有这两个值(“UserImage”
,“CarImage”
)中的一个,并在我的代码中使用它,如下所示:
switch (object_model)
{
case "UserImage":
{ UserImage.Add(img); break; }
case "CarImage":
{ CarImage.Add(img); break; }
}
object_model.add(img)
问题:
我需要避免使用switch语句,只需这样做:
switch (object_model)
{
case "UserImage":
{ UserImage.Add(img); break; }
case "CarImage":
{ CarImage.Add(img); break; }
}
object_model.add(img)
注意:我在RubyonRails中通过使用
constantize
(即model\u object.constantize.add(img)
)实现了同样的效果,似乎您的object\u 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”一样使用它。添加(img)危险在于,您实际上允许对任何字符串进行此类调用,因此您有责任决定是否应添加此模型
由于您的变量只能有两个值,因此最好将其定义为
Enum
,而不是对Enum而不是字符串调用扩展方法。此设置似乎有点奇怪。你能提供更多关于你想做什么的背景吗?object\u model
来自哪里?什么是UserImage
和CarImage
?变量?静态类?@在UserImage和CarImage之间是静态类这里有一种使用IoC容器和策略模式接口的方法,但它需要4行以上的代码。如果您不使用IoC容器,您需要添加它们(autofac、ninject、e.t.c),可能需要查看一下它的特性,但现在还不清楚UserImage
和CarImage
实际上是静态类。它们也可能是变量。这个答案是正确的,尽管w.r.t.对于@InBetween所说的,标题确实是说访问对象实例方法(我认为Type.GetType(“Object\u model”)
应该是Type.GetType(Object\u model)
),同样,Type.GetType(“Object\u model”)
应该是Type.GetType(object\u model)
@InBetween谢谢。请确保您对对象\模型进行了清理,否则用户可能可以在任何静态类上调用添加(对象)
。谢谢,但我不需要将其仅用于Add()方法,我需要在任何其他方法中使用它class@MoamenNaanou这正是您需要的,您将有一个Add方法,冷调用任何其他方法或类中的任何字符串变量