c# – 设置方法声明的多个返回值
发布时间:2020-12-15 08:29:39 所属栏目:百科 来源:网络整理
导读:我有如下功能: public var UpdateMapFetcher(int stationID,int typeID) 我需要这个函数来返回字符串或int. 我的返回值设置如下 if (finaloutput == "System.String") { // param1[i] = Convert.ChangeType(typeID_New.ToString(),typeof(string)); returnv
|
我有如下功能:
public var UpdateMapFetcher(int stationID,int typeID) 我需要这个函数来返回字符串或int. 我的返回值设置如下 if (finaloutput == "System.String")
{
// param1[i] = Convert.ChangeType(typeID_New.ToString(),typeof(string));
returnvalue = returnvalue.ToString();
return returnvalue;
}
else if (finaloutput == "System.Int32")
{
int a=0;
a = Convert.ToInt32(returnvalue);
return a;
}
如何在动态环境中将一种数据类型作为返回值. 解决方法
我的直觉告诉我,你正在尝试将字符串值转换为某种类型.在这种情况下,您可以使用:
public T UpdateMapFetcher<T>(int stationID)
{
//var someValue = "23";
return (T)Convert.ChangeType(someValue,typeof(T));
}
//then
var typed = UpdateMapFetcher<int>(6);
如果你不知道T,你可以使用映射(0-int,1-string等): public object UpdateMapFetcher(int stationID,int type)
{
var typeMap = new []{ typeof(int),typeof(string)};
//var someValue = "23";
return Convert.ChangeType(someValue,typeMap[type]);
}
//then
var untyped = UpdateMapFetcher(6,0/*0 is int*/);
if (untyped.GetType() == typeof(int))
{ /*is int*/
}
另一种解决方案是使用隐式转换: public class StringOrInt
{
private object value;
public ValueType Type { get; set; }
public static implicit operator StringOrInt(string value)
{
return new StringOrInt()
{
value = value,Type = ValueType.String
};
}
public static implicit operator StringOrInt(int value)
{
return new StringOrInt()
{
value = value,Type = ValueType.Int
};
}
public static implicit operator int(StringOrInt obj)
{
return (int)obj.value;
}
public static implicit operator string(StringOrInt obj)
{
return (string)obj.value;
}
}
public enum ValueType
{
String,Int
}
然后(简化): public static StringOrInt UpdateMapFetcher(int stationID,int typeID)
{
if (typeID == 0)
return "Text";
return 23;
}
private static void Main(string[] args)
{
var result = UpdateMapFetcher(1,1);
if (result.Type == ValueType.String) { }//can check before
int integer = result;//compiles,valid
string text = result;//compiles,fail at runtime,invalid cast
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
