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)
但它很笨拙.
为什么你想要不同的退货类型?
必须键入函数的返回类型.与任何其他变量或操作一样,从指定类型继承的任何类型都是有效的返回值(这就是为什么object允许任何值作为值).
来电者的后勤工作没有多大意义; 你怎么会知道是否键入您的变量作为char或string在你的榜样?
是否有特殊原因导致您无法string在所有情况下返回?
| 归档时间: |
|
| 查看次数: |
19172 次 |
| 最近记录: |