我有不同的返回类型,所以我无法决定该使用什么。 我在下面想过类似的事情,但是如果您有其他想法,我会开放的。
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
}
我想确定我要返回的类型,以便它匹配,否则会丢弃编译时错误。
答案 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")