在方法GetString中,新定义的字符串str赋初值为什么不能为null ?

努力的Hugh 2017-07-11 11:44:37
跪求大神解答???
class Program
{
static void Main(string[] args)
{
//用方法来实现:有一个字符串数组:{ "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" },
//请输出最长的字符串。
string[] s = { "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" };
string str = GetString(s);
Console.WriteLine(str);
Console.ReadKey();
}
/// <summary>
/// 输出最长的字符串
/// </summary>
/// <param name="s">传入的字符串数组</param>
/// <returns>返回的最长字符串</returns>
public static string GetString(string[] s)
{
//string str = null;
string str = s[0]; //str不能为null
for (int i = 0; i < s.Length; i++)
{
if (str.Length < s[i].Length)
{
str = s[i];
}
}
return str;
}
}
...全文
261 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2017-07-13
  • 打赏
  • 举报
回复
你说的是能通过编译,但是运行出错,因为你str是null 之后没有赋值 if (str.Length < s[i].Length) 此时str.Length因为str是null所以执行到这里自然报错了。
wang_peng_yl 2017-07-13
  • 打赏
  • 举报
回复
string str = null; 很少有这样干的 真纠结那点内存,这样 string str = string.Empty;
努力的Hugh 2017-07-13
  • 打赏
  • 举报
回复
引用 8 楼 caozhy 的回复:
你说的是能通过编译,但是运行出错,因为你str是null 之后没有赋值 if (str.Length < s[i].Length) 此时str.Length因为str是null所以执行到这里自然报错了。
谢谢!
threenewbee 2017-07-12
  • 打赏
  • 举报
回复
语法上说可以string str = null; 但是浪费了一丁点的性能
秋的红果实 2017-07-12
  • 打赏
  • 举报
回复
奥,再改下 public static string GetString(string[] s) { //string str = null; string str=""; int noNullNum; for(int index=0;index<s.Length;index++) { if(s[index]!=null { str=s[index]; noNullNum=index; break; } //string str = s[0]; //str不能为null for (int i = noNullNum; i < s.Length; i++) { if(s[I]==null) { if (str.Length < s[i].Length) { str = s[i]; } } else { continue;} } return str; } }
秋的红果实 2017-07-12
  • 打赏
  • 举报
回复
建议在设计上多考虑下,在数据来源上卡死数据,否则算法就麻烦了,尤其复杂算法 string[] s = { "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" }; 这里就不要让有null,就像用户输入验证一样,有的不能输入 可以这样改 public static string GetString(string[] s) { //string str = null; string str=""; int noNullNum; for(int index=0;index<s.Length;index++) { if(s[index]!=null { str=s[index]; break; } //string str = s[0]; //str不能为null for (int i = 0; i < s.Length; i++) { if(s[I]==null) { if (str.Length < s[i].Length) { str = s[i]; } } else { continue;} } return str; } }
xuzuning 2017-07-12
  • 打赏
  • 举报
回复
string str = s[0]; 这样写是对的! string str = null; 这样写也是对的! 都能通过编译,不知道你遇到了什么问题
  • 打赏
  • 举报
回复
有什么问题?其实用linq的order排下序就能取了,如果你的数组有可能为null,那么你的代码会在length异常,可以加上该判断,另外你上来就赋值0位给了str,循环就没必要还从0开始,该从1开始
努力的Hugh 2017-07-12
  • 打赏
  • 举报
回复
引用 4 楼 From_TaiWan 的回复:
建议在设计上多考虑下,在数据来源上卡死数据,否则算法就麻烦了,尤其复杂算法 string[] s = { "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" }; 这里就不要让有null,就像用户输入验证一样,有的不能输入 可以这样改 public static string GetString(string[] s) { //string str = null; string str=""; int noNullNum; for(int index=0;index<s.Length;index++) { if(s[index]!=null { str=s[index]; break; } //string str = s[0]; //str不能为null for (int i = 0; i < s.Length; i++) { if(s[I]==null) { if (str.Length < s[i].Length) { str = s[i]; } } else { continue;} } return str; } }
谢谢!
努力的Hugh 2017-07-12
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
string str = s[0];
这样写是对的!

string str = null;
这样写也是对的!

都能通过编译,不知道你遇到了什么问题

我的会报错的,如下图。信息是:未将对象引用设置到对象的实例。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧