gpt4 book ai didi

c# - 为方法声明设置多个返回值

转载 作者:太空狗 更新时间:2023-10-29 21:08:08 31 4
gpt4 key购买 nike

我有一个函数如下:

  public var UpdateMapFetcher(int stationID, int typeID)

我需要这个函数来返回字符串或整数。

我的返回值设置如下

 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
}

关于c# - 为方法声明设置多个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071893/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com