Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按字符串类名称访问类方法_C#_.net - Fatal编程技术网

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方法,冷调用任何其他方法或类中的任何字符串变量