.net 反序题目的详细解答第2/2页

 更新时间:2009年06月13日 20:34:47   作者:  
在各种答案,以及平时面试过程中,这道题总归会有一些非常典型的错误发生。其中给老赵的感觉也非常有意思,不知其中的“思路”是否如老赵猜测那样。

常见错误
  在各种答案,以及平时面试过程中,这道题总归会有一些非常典型的错误发生。其中给老赵的感觉也非常有意思,不知其中的“思路”是否如老赵猜测那样。

在方法中进行输入和输出
  有不少朋友在代码里放置了这样的代码:
复制代码 代码如下:

static void Reverse(int[] array, int begin, int end)
{
Console.WriteLine("请输入xxx");
array[0] = Int32.Parse(Console.ReadLine());
...

for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(i);
}
}

为什么会出现这种情况?老赵估计是受到了某些培训机构的影响(观察出现这个问题的朋友们的分布便知)。这些培训一再强调输入、输出,而没有让学员有任何“模块”,“类库”,“辅助方法”的概念。学员的观念中,任何程序都要向用户去索要“输入”,并且要“输出”,否则就不算是程序。

打印错误,而不是抛出异常
代码如下:
复制代码 代码如下:

static void Reverse(int[] array, int begin, int end)
{
if (array == null)
{
Console.WriteLine("数组为空");
return;
}

...
}

除了和上面类似的“思维”以外,这说明有些朋友还没有形成“抛出异常”的观念。这意味着在过往的编程经验中,可以说完全没有“参数校验”的概念在头脑里面。培训机构只是一味地CRUD,展示,写入,却没有“抛出异常”的想法。同理,即使在题目中已经明确写清了是“抛出”异常,有些朋友的写法是这样的:
复制代码 代码如下:

static void Reverse(int[] array, int begin, int end)
{
try
{
// 交换数据
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}

很明显,他们只有“捕获”异常的概念——自然是框架本身抛出的异常——而不知“抛出”异常。

参考答案
  以下是老赵给出的参考答案:
复制代码 代码如下:

static void Reverse(int[] array, int begin, int end)
{
if (array == null)
{
throw new ArgumentNullException("array", "array不能为空");
}

if (begin < 0)
{
throw new ArgumentOutOfRangeException("begin", "begin不能小于0");
}

if (end < begin)
{
throw new ArgumentOutOfRangeException("end不能小于begin", (Exception)null);
}

if (end >= array.Length)
{
throw new ArgumentOutOfRangeException("end", "end超过array最大下标");
}

while (end > begin)
{
int temp = array[begin];
array[begin] = array[end];
array[end] = temp;

begin++;
end--;
}
}

相关文章

  • .net 反序题目的详细解答

    .net 反序题目的详细解答

    在各种答案,以及平时面试过程中,这道题总归会有一些非常典型的错误发生。其中给老赵的感觉也非常有意思,不知其中的“思路”是否如老赵猜测那样。
    2009-06-06
  • Asp.net防止盗链的实现原理分析

    Asp.net防止盗链的实现原理分析

    今天在书上偶然看到了如何实现防盗链的问题,到网上查看了一下盗链主要是其他的一些网站引用本站图片或者下载链接。
    2011-01-01
  • asp.net Accee数据库连接不稳定解决方案

    asp.net Accee数据库连接不稳定解决方案

    我最最进做了个网站,我是用VS2005 + Access 数据库连接,可以我在连接的时候总是出现连接不稳定的情况,同样的代码,一个字也没改,就是连接不上,但是有的又连接的上。真是郁闷,真是弄死人。
    2009-07-07
  • ASP.NET Core中使用令牌桶限流的实现

    ASP.NET Core中使用令牌桶限流的实现

    这篇文章主要介绍了ASP.NET Core中使用令牌桶限流的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • asp.net C#生成和解析二维码的实例代码

    asp.net C#生成和解析二维码的实例代码

    这篇文章介绍了asp.net C#生成和解析二维码的实例代码,有需要的朋友可以参考一下
    2013-10-10
  • DataList中TextBox onfocus调用后台void静态方法及获取相应行数

    DataList中TextBox onfocus调用后台void静态方法及获取相应行数

    DataList中我放了一个TextBox 现在的问题是当我光标放到TextBox上的时候。如果让onfocus调用后台某一个void静态方法并且在静态方法里边获取光标相应的DataList的相应行数,本文介绍如何实现,感兴趣的朋友可以了解下
    2013-01-01
  • asp.net core下给网站做安全设置的方法详解

    asp.net core下给网站做安全设置的方法详解

    这篇文章主要给大家介绍了关于asp.net core下给网站做安全设置的相关资料,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • ASP.NET 上传文件导入Excel的示例

    ASP.NET 上传文件导入Excel的示例

    这篇文章主要介绍了ASP.NET 上传文件导入Excel的示例,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下
    2021-04-04
  • asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页

    asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页

    ASP.NET 3.5中新增加的ListView控件是一个用于页面数据绑定和界面布局的非常棒的控件,它在ASP.NET 2.0 GridView的基础上做了很多改进,用户在使用时可以控制的元素更多,开发时的灵活性更大了,个人觉得ListView在使用时比DataGrid和GirdView更加顺手。
    2009-11-11
  • ASP.NET MVC 3仿Server.Transfer效果的实现方法

    ASP.NET MVC 3仿Server.Transfer效果的实现方法

    这篇文章主要介绍了ASP.NET MVC 3仿Server.Transfer效果的实现方法,需要的朋友可以参考下
    2015-10-10

最新评论