返回T,其中返回类型不同

时间:2019-04-09 07:20:49

标签: c# syndication syndication-feed syndication-item

我有不同的返回类型,所以我无法决定该使用什么。 我在下面想过类似的事情,但是如果您有其他想法,我会开放的。

public T GetValue<T>(ContentType type)
{
    foreach (SyndicationItem item in feed.Items)
    {
        switch (type)
        {
            case ContentType.BaseUri:
                return item.BaseUri;
                break;
            case ContentType.Categories:
                return item.Categories;
                break;
            case ContentType.Content:
                return item.Content;
                break;
            case ContentType.Contributors:
                return item.Contributors;
                break;
            case ContentType.Copyright:
                return item.Copyright;
                break;
          }
     }
}

public enum ContentType
{
    BaseUri,
    Categories,
    Content,
    Contributors,
    Copyright
}

我想确定我要返回的类型,以便它匹配,否则会丢弃编译时错误。

2 个答案:

答案 0 :(得分:0)

我不明白将开关盒放在for循环中的意义。您将在第一次遇到这种情况时退出循环。
但是要处理有关返回类型不确定性的问题,如果您知道返回类型将是引用类型,那么您也可以这样做:

您可以将返回类型设置为object,然后调用方必须进行强制转换:

public object GetValue(ContentType type)
{
    switch (type)
    {
        case ContentType.BaseUri:
            return item.BaseUri;
            break;
        case ContentType.Categories:
            return item.Categories;
            break;
        case ContentType.Content:
            return item.Content;
            break;
        case ContentType.Contributors:
            return item.Contributors;
            break;
        case ContentType.Copyright:
            return item.Copyright;
            break;
      }
}

呼叫者:

public void Caller() 
{
    object x = GetValue();
    if ( x.GetType() == typeof(BaseUri) ) // I assume that BaseUri is also a class name
    {
        BaseUri baseUri = (BaseUri)x;
        // now you can use baseUri to initialize another variable in outer scopes ... or use it as a parameter to some method or ...
    }
    else if(x.GetType() == typeof(Category))
    {
        // the same logic of casting and using goes here too ...
    }
}

答案 1 :(得分:-1)

昨天我看到了这个,我很好奇如何复制它。

cascade = {CascadeType.MERGE,
            CascadeType.REMOVE}

这就是您的称呼方式。 // Summary: // Returns value of specified property as Sandbox.ModAPI.Interfaces.ITerminalProperty.TypeName // // Parameters: // block: // block reference // // propertyId: // property id (name) // // Type parameters: // T: // required value type of Sandbox.ModAPI.Interfaces.ITerminalProperty.TypeName // // Returns: // property value as Sandbox.ModAPI.Interfaces.ITerminalProperty.TypeName public static T GetValue<T>(this Ingame.IMyTerminalBlock block, string propertyId);
您可以询问另一个具有不同类型的属性。 item.GetValue<StringBuilder>("gpsCoords")

代码所有者:https://github.com/malware-dev/MDK-SE