2

我有不同的返回类型,所以我无法决定使用什么。我在下面想类似的事情,但如果你有其他想法,我愿意接受。

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
}

我想决定我想返回什么类型,所以它匹配,否则它会抛出一个编译时错误。

4

2 回答 2

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 ...
    }
}
于 2019-04-09T08:07:03.570 回答
-1

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

        // 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")
您可以询问其他不同类型的房产。item.GetValue<bool>("IsPerm")

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

于 2019-04-09T07:45:31.380 回答