如何在返回Interface时找到真实类型?

时间:2016-05-19 07:35:27

标签: c# .net types

如果我有一个功能

public IEnumerable<string> GetStrings()
{
    return new string[]{"all","my","strings"};
} 

有什么方法可以确定&#34;真实&#34;返回值的类型(string [])?反思给了我:

Name: "IEnumerable`1"
Namespace: "System.Collections.Generic"
FullName: "System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

最终目标是实例化此类型的对象,将其序列化并用作api发现的示例。

2 个答案:

答案 0 :(得分:2)

这很容易。

var result = GetStrings();    
var returnType = result.GetType();

如果不调用方法,就无法获得真正的返回类型。如果方法是这样的,该怎么办?

Random random = new Random();
public IEnumerable<string> GetStrings()
{
    var randomValue = random.Next();
    if (randomValue % 5 == 3)
        return new string[] { "all", "my", "strings" };
    else if (randomValue > 15)
        return new List<String>() { "all", "my", "strings" };
    else if (randomValue > 25)
        return new HashSet<String>() { "all", "my", "strings" };

    return null;
}

答案 1 :(得分:1)

反射在这里没有帮助,它只能告诉你该方法返回的签名是什么(在你的情况下为IEnumerable<string>)。

找出的一种方法是调用方法并检查返回的对象

var result = myInstance.GetString();
Console.WriteLine(result.GetType()); // System.String[]