我有一个返回字符串值的函数。如下所示,它填充一个列表,然后在该列表中找到最长的值并将其返回。
public static string myFunction(string str)
{
for (blah str)
{
myList.Add(someString);
}
string longest = myList[0];
foreach (string s in myList)
{
if (s.Length > longest.Length)
{
longest = s;
}
}
return longest;
}
我注意到如果我的列表没有填满,我收到一条错误消息,所以决定添加一个条件来检查列表是否为空。但添加if语句来检查这会导致返回值超出范围。
如何在不声明其他变量的情况下解决此问题?
public static string myFunction(string str)
{
for (blah str)
{
myList.Add(someString);
}
if (myList.Count != 0)
{
string longest = myList[0];
foreach (string s in myList)
{
if (s.Length > longest.Length)
{
longest = s;
}
}
}
return longest;
}
我也想知道如果找到所需的字符串,如何返回s字符串,如果找不到,则返回-1?我知道函数的返回类型只能是一件事,但是如果我的函数需要返回-1,如果找不到所需的字符串,我该怎么做?
编辑:已解决,首先在我声明列表时添加以下内容(而不是在if
语句中使用myList[0]
声明这是我的大错误) :
List<string> myList = new List<string>() {""};
其次,对于不同的返回类型(这只是编程要求),我声明了一个对象返回类型,以便为返回值实现string
或-1
。
另一个编辑:这个问题提供的答案也是正确的(我已经标记过了)虽然它使用的是另一个目前不是我关注的范例。
答案 0 :(得分:1)
您可以使用此在线人员:
string longestString = strsList.FirstOrDefault(st => st.Length == strsList.Select(s => s.Length).Max()) ?? string.Empty;
如果列表为空,它将返回最长的字符串或空字符串。
如果您要查找最长的时间,请考虑使用:
return strsList.Select(s => s.Length).Concat(new[] {-1}).Max();
如果字符串为空或长度最长,则返回-1
。