c# – 设置方法声明的多个返回值

前端之家收集整理的这篇文章主要介绍了c# – 设置方法声明的多个返回值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有如下功能
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      
}

猜你在找的C#相关文章