从文件中读取类型时如何返回项目

时间:2015-02-03 03:27:42

标签: c#

我正在调用一个具有针对该方法声明的类型的函数,即

public T Get<T>().

我从文件中读取一个字符串并通过开关解析它以确定使用的类型,即。

switch (type)
{
    case "Text":
         item = Get<Text>();
         break;
    case "Button":
         item = Get<Button>();
         break;
}

然后我如何从调用它的函数返回Type项?请注意,我不想返回公共父级,因为我需要访问派生类的方法。

public <????> newGet()
{
    switch (type)
    {
        case "Text":
            item = Get<Text>();
            break;
        case "Button":
            item = Get<Button>();
            break;
    }
    return item;
}

2 个答案:

答案 0 :(得分:3)

使用dynamic听起来不错。你应该重新考虑你在这里做的事情。

“请注意,我不想返回公共父级,因为我需要访问派生类的方法。”

好的,那么......你要做什么来访问这些方法?使用另一个switch在类型之间切换,然后调用您想要的方法?为什么这里有两个switch语句做同样的事情?我不知道你正在处理什么的确切架构,但通常你最好找出你将要回来的类型(即通过返回“Text”或“Button”或其他来自一个函数),然后调用一个强类型函数,该函数可以获取并调用方法。

答案 1 :(得分:1)

您可以考虑使用动态类型。它仅适用于.NET 4.0及更高版本

public dynamic newGet(string type)
{
   dynamic item = null;
   switch (type)
   {
      case "Text":
        item = "ABC";
        break;
      case "Number":
        item = 1;
        break;
   }
   return item;
}

如您所见,我可以使用newGet返回的字符串的长度

dynamic text= newGet("Text");
Console.WriteLine(text.Length); //"ABC".Length = 3

dynamic number= newGet("Number");
Console.WriteLine(number + 5); //1 + 5 = 6

这也可以。请注意运行时异常

string text= newGet("Text"); //You can assign to
Console.WriteLine(text.Length); //"ABC".Length = 3

int number= newGet("Number");
Console.WriteLine(number + 5); //1 + 5 = 6