CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(二)
CodeRush 是专为 Visual Studio 打造的高效开发插件,通过集成 AI 驱动功能(如自然语言生成代码的 AiGen 和智能搜索逻辑的 AiFind)、语音交互及深度重构工具,直接在 IDE 内无缝完成代码生成、修改与导航,消除窗口切换与手动操作,显著提升编码速度与专注度,让开发者更聚焦核心问题解决。
CodeRush for Visual Studio v25.1已于日前全新发布,此版本新推 AI 双引擎 AiGen(语音/文字生成与修改代码)和 AiFind(智能代码搜索),接下来我们将逐一为大家揭开这些功能的神秘面纱,欢迎下载新版体验!
在上文中(点击这里回顾>>),我们为大家介绍了安装说明、AiGen、调试器显示属性等,本文将继续介绍添加操作符重载、添加测试用例等。
获取CodeRush v25.1正式版下载
添加操作符重载
对于该类中的插入符号,双击并按住Ctrl键,然后说:“我可以获得一些数学运算符重载吗?”
过了一会儿,您应该看到下面的方法插入到您的Fraction类中:
[DebuggerDisplay("{Numerator}/{Denominator}")]
public class Fraction
{
public static Fraction operator +(Fraction a, Fraction b)
{
int numerator = a.Numerator * b.Denominator + b.Numerator * a.Denominator;
int denominator = a.Denominator * b.Denominator;
return new Fraction(numerator, denominator);
}public static Fraction operator -(Fraction a, Fraction b)
{
int numerator = a.Numerator * b.Denominator - b.Numerator * a.Denominator;
int denominator = a.Denominator * b.Denominator;
return new Fraction(numerator, denominator);
}public static Fraction operator *(Fraction a, Fraction b)
{
int numerator = a.Numerator * b.Numerator;
int denominator = a.Denominator * b.Denominator;
return new Fraction(numerator, denominator);
}public static Fraction operator /(Fraction a, Fraction b)
{
if (b.Numerator == 0)
{
throw new DivideByZeroException("Cannot divide by a fraction with zero numerator.");
}
int numerator = a.Numerator * b.Denominator;
int denominator = a.Denominator * b.Numerator;
return new Fraction(numerator, denominator);
}
public int Numerator { get; set; }
public int Denominator { get; set; }public Fraction(int numerator, int denominator)
{
if (denominator == 0)
{
throw new ArgumentException("Denominator cannot be zero.", nameof(denominator));
}Numerator = numerator;
Denominator = denominator;
}
}
新增测试用例
有了新的操作符重载,改进的Fraction类更容易使用。现在让我们用一些测试用例来验证它。双击并按住Ctrl键,然后说一些类似于“一些测试用例怎么样?”
在几秒钟内,您应该将一个新的类和文件FractionTests.cs添加到项目中。
在机器上使用已经引用的NUnit框架,AI构建了以下内容:
[TestFixture]
public class FractionTests
{
[Test]
public void TestAddition()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(1, 3);
var result = fraction1 + fraction2;
Assert.AreEqual(5, result.Numerator);
Assert.AreEqual(6, result.Denominator);
}[Test]
public void TestSubtraction()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(1, 3);
var result = fraction1 - fraction2;
Assert.AreEqual(1, result.Numerator);
Assert.AreEqual(6, result.Denominator);
}[Test]
public void TestMultiplication()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(2, 3);
var result = fraction1 * fraction2;
Assert.AreEqual(2, result.Numerator);
Assert.AreEqual(6, result.Denominator);
}[Test]
public void TestDivision()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(3, 4);
var result = fraction1 / fraction2;
Assert.AreEqual(4, result.Numerator);
Assert.AreEqual(6, result.Denominator);
}[Test]
public void TestZeroDenominatorThrowsException()
{
Assert.Throws<ArgumentException>(() => new Fraction(1, 0));
}[Test]
public void TestZeroNumeratorInDivisionThrowsException()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(0, 1);
Assert.Throws<DivideByZeroException>(() => fraction1 / fraction2);
}
}
请注意,在上面高亮显示的行中,我们正在执行新的操作符重载。
遗留代码和新框架
要升级遗留代码或使用新框架,请打开该文件并简单地说明所需内容。例如,在我们刚刚创建的测试类中,可能希望将所有这些Assert.AreEqual调用转换为更流畅的内容。
例如,双击并按住Ctrl键,然后说,“嘿,我们能把所有这些Assert.AreEqual调用转换为Assert.That调用吗?”
在几秒钟内,AiGen将类中的每个方法更改为如下所示:
[TestFixture]
public class FractionTests
{
[Test]
public void TestAddition()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(1, 3);
var result = fraction1 + fraction2;
Assert.That(result.Numerator, Is.EqualTo(5));
Assert.That(result.Denominator, Is.EqualTo(6));
}[Test]
public void TestSubtraction()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(1, 3);
var result = fraction1 - fraction2;
Assert.That(result.Numerator, Is.EqualTo(1));
Assert.That(result.Denominator, Is.EqualTo(6));
}[Test]
public void TestMultiplication()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(2, 3);
var result = fraction1 * fraction2;
Assert.That(result.Numerator, Is.EqualTo(2));
Assert.That(result.Denominator, Is.EqualTo(6));
}[Test]
public void TestDivision()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(3, 4);
var result = fraction1 / fraction2;
Assert.That(result.Numerator, Is.EqualTo(4));
Assert.That(result.Denominator, Is.EqualTo(6));
}[Test]
public void TestZeroDenominatorThrowsException()
{
Assert.Throws<ArgumentException>(() => new Fraction(1, 0));
}[Test]
public void TestZeroNumeratorInDivisionThrowsException()
{
var fraction1 = new Fraction(1, 2);
var fraction2 = new Fraction(0, 1);
Assert.Throws<DivideByZeroException>(() => fraction1 / fraction2);
}
}
更多DevExpress线上公开课、中文教程资讯请上中文网获取