C#,动态返回类型

Enr*_*uev 7 c# dynamic return-type

我需要的是一个方法,可以在一个条件后返回一个类型(没有对象,导致不允许转换).这是一个例子:

??? right (string fullStr, int endPosition)
{
 string tmpStr = "";

 tmpStr = fullStr.Substring(endPosition);

 if(tmpStr.Length == 1)
   return tmpStr[0]; //return a char!!
 else
   return tmpStr; //return a string!!
}
Run Code Online (Sandbox Code Playgroud)

我尝试了泛型,但我只能返回进入的类型,(如果返回了char中的char,并且返回了字符串中的字符串).我试过这个:

    public static T right<T>(T stringToCheck, int endPosition)
    {
        if (typeof(T).ToString() == "System.String")
        {
            string fullString = (string)((object)stringToCheck);
            string response = "";

            response = fullString.Substring(endPosition);

            if (response.Length == 1)
            {

                return (T)((object)response[0]);
            }
            else
                return (T)((object)response);
        }

        return stringToCheck;
    }
Run Code Online (Sandbox Code Playgroud)

我不能使用类型转换(返回一个对象),不能使用ref params.

对方法的调用必须保持不变:

right(stringOrChar,int) -> returns string or char.
Run Code Online (Sandbox Code Playgroud)

谢谢

McK*_*Kay 11

我认为这在理论上是不可能的.您可以在C#4中使用"动态",但如果您还没有,那么就不能这样做.

如果它可以返回一个字符串或一个字符,那么它必须是一个对象,两个都来自哪个,其中"对象"是你唯一的选择.然后你必须做演员阵容.

C#(3.5和之前的版本)需要知道方法的单一返回类型是什么,以便它可以检查调用方法.事实上,在C#4中,当你说"动态"时,它实际上使用了"对象".

您可以创建一个包含两者的自定义类/结构

public class StringOrChar
{
    char charValue;
    string stringValue;
    bool isString;
}
Run Code Online (Sandbox Code Playgroud)

但它很笨拙.

为什么你想要不同的退货类型?


Ada*_*son 8

必须键入函数的返回类型.与任何其他变量或操作一样,从指定类型继承的任何类型都是有效的返回值(这就是为什么object允许任何值作为值).

来电者的后勤工作没有多大意义; 你怎么会知道是否键入您的变量作为charstring在你的榜样?

是否有特殊原因导致您无法string在所有情况下返回?