我有一个函数,其中包括一个声明为int privateCount的参数。 当我想在这个参数上调用ToString()时,ReSharper将其灰显并将其标记为冗余调用。 所以,好像我一样,我删除了ToString(),代码仍然构建!

C#编译器如何允许这样,其中str是一个字符串?

str += privateCount + ...

===============>>#1 票数:19 已采纳

字符串的+运算符被重载以调用在表达式的左侧和右侧传递的String.Concat。 从而:

string x = "123" + 45;

获取编译为:

String.Concat("123", 45);

由于String.Concat接收两个对象,因此右侧(45)被装箱,然后在其上调用ToString()。

请注意,这种“重载”不是通过语言中的运算符重载(也就是说它不是名为op_Addition的方法),而是由编译器处理。

===============>>#2 票数:8

这不仅是不好的做法,而且性能也较差:整数必须被装箱,因为String.Concat预测了一个对象而int.ToString()不需要装箱。

===============>>#3 票数:2

C#会自动将对象转换为字符串。 考虑以下代码行:

aString = aString + 23;

这是有效的C#; 它编译为String.Concat()的调用,它接受两个对象作为参数。 这些对象会自动转换为字符串对象。

你写的时候会发生同样的事情:

aString += 23;

同样,这将编译为对String.Concat()的相同调用; 它的写法不同。

===============>>#4 票数:1

这是一种有效的不良做法,因为如果变量是字符串或int,您必须三思而后行。 如果变量被称为myInt怎么办?

myInt = myInt + 23;

它在这种形式下更具可读性和可理解性?

myInt = mInt + "23";

甚至:

myInt = string.Format("{0}{1}", myInt, 23);

我们从代码中知道它是一个字符串而不是整数。

  ask by ProfK translate from so

未解决问题?本站智能推荐:

2回复

冗余ToString代码?

我在想 : 写这段代码: Resharper表现得像:(注意灰色) 请问3个问题 1)删除ToString (),如何在不调用已删除的ToString ()的情况下输出其显示字符串? 2)它是否建议删除它,因为他已经在内部调用它? 还是因为另一个原因?
3回复

冗余Object.ToString

我正在审查以下代码。 SnapshotID.ToString()冗余地调用ToString()方法。 可能发生的潜在问题是什么? 例如速度。 编辑 我已经添加了一个测试,如果有人想完善: http : //pastebin.com/gynNjwT1
6回复

Int32.ToString()是否特定于文化?

我正在运行ReSharper的测试版,它给了我以下代码的警告: 警告在id.ToString()调用上,它告诉我“明确指定字符串转换中的文化”。 我理解这个警告,我知道如何修复它 - 只需将代码更改为更笨重的id.ToString(CultureInfo.InvariantCultur
3回复

为什么resharper不建议删除冗余访问修饰符?

Resharper非常棒,就像任何fule kno一样。 但是,如果我声明一个方法: 或者枚举: Resharper不建议删除冗余访问修饰符......为什么不呢?
2回复

C#中表达式中的新Object()和新Object {}之间有什么区别?

我有以下代码片段: Expression<Func<TSource, TDest>> expression = model => new TDest{}; // Result: {model => new TestModel(){}} ReSharpe
4回复

在构造函数中解决虚拟成员调用

我有一个抽象类: 派生类: 在基类中,ReSharper告诉我 虚构件成员调用 我知道由于执行顺序而调用该方法很危险..但是如何解决这个问题呢? 上下文:我想在每个派生类中设置数据,然后在基类中处理。 我想在基类中调用SetupData()方法,因为它在
1回复

如何在VS / Resharper中生成对象-对象映射

是否有任何工具/插件可以在VS / Resharper中生成“手动”映射代码。 即有2个具有相同属性集的类(Foo和Bar): 是否可以某种方式生成以下代码? 避免使用诸如AutoMapper,EmitMapper等的映射工具。
2回复

自动使所有子类都调用父方法

我目前正在重构一个大型应用程序。 有大量的Windows窗体,它们都继承自一个基本窗体。 使用Application.Run()运行第一种形式后,我无法调试任何事情。 由于代码是一团糟,因此在调试UI时我不容易遵循流程,也不知道我何时查看哪种形式。 对于我来说,有太多形式无法
1回复

Resharper的意思是“对象分配(明显)”?

Resharper在我的代码中突出显示新关键字,并提示“对象分配(明显)”。 这是什么意思?
4回复

创建对象时自动生成属性

我有一些具有很多属性的类,我想知道在创建对象时,Visual Studio,Resharper或其他工具是否有任何方法可以创建调用属性的语法。 所以我不必经历自己的所有属性,只需设置值即可。 像这样的东西。 我不知道人们是否理解这个问题。 我希望Visual Studio在创建对象