C#可以在方法中返回一个类型吗?

时间:2014-11-21 22:04:56

标签: c#

我可以拥有类似的东西:

AMess.Foo = MessyData.GetData<MessyData.GetType(key)>(key);

我的问题与我的例子类似。我有一个动态类型的数据源,所以我必须做一些事情来确定数据类型。但是在任何地方进行类型检查都是痛苦的屁股。所以我想也许我可以有一些代码只是为了告诉我它是什么类型。我可以这样做吗?

或者更好的解决方案?

请不要担心AMess.Foo,它会吃掉所有东西。

2 个答案:

答案 0 :(得分:2)

不,它不能。您将不得不使用Reflection。我目前还没有在我的机器上安装Visual Studio,因此我目前无法测试语法,但这应该是关闭的:

var type = MessyData.GetType(key);
var castMethod = MessyData.GetType().GetMethod("GetData").MakeGenericMethod(type);
AMess.Foo = castMethod.Invoke(MessyData, new[] { key });

答案 1 :(得分:1)

没有。必须在编译时解析泛型类型参数。

如果您使用:

MessyData.GetData<SomeType>(key);

然后SomeType需要是特定类(或接口,结构等)的名称。它在问题中永远不会是表达式

如果你推断出类型,如:

MessyData.GetData(key); // infer type arg

然后调用中使用的类型是key变量的编译时类型,不是运行时类型。这些类型可能有所不同。

如果您真的想要动态输入,可以让GetData接受dynamic类型的参数(该方法将是非泛型的)。但是你要解决的问题是什么?