gpt4 book ai didi

C#,动态返回类型

转载 作者:太空狗 更新时间:2023-10-29 19:52:14 26 4
gpt4 key购买 nike

我需要的是一种可以根据条件返回类型(没有对象,因为不允许转换)的方法。这是一个例子:

??? 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!!
}

我尝试了泛型,但我只能返回传入的类型,(如果一个字符传入一个字符,则返回一个字符,如果一个字符串传入一个字符串,则返回一个字符串)。我试过这个:

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;
}

我不能使用类型转换(返回一个对象),不能使用 ref 参数。

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

right(stringOrChar,int) -> returns string or char.

谢谢

最佳答案

我认为这在理论上是不可能的。您可以在 C# 4 中使用“动态”,但如果您还没有做到这一点,则不能这样做。

如果它可以返回一个字符串或一个字符,那么它必须是一个对象,这两个对象都来自该对象,“对象”是您唯一的选择。然后你必须做 Actor 。

C#(3.5 及之前的版本)需要知道方法的单一返回类型是什么,以便它可以对调用方法进行检查。事实上,在 C#4 中,当您说“动态”时,它实际上在下面使用“对象”。

你可以创建一个自定义的类/结构同时拥有这两者

public class StringOrChar
{
char charValue;
string stringValue;
bool isString;
}

但它很笨拙。

为什么要有不同的返回类型?

关于C#,动态返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785359/

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