上下文
我继承了大量的遗留代码库,大量使用了Tuple< ...>类型。代码中充满了以下几行:
myVar = myTuple.Item4;
我想通过引入具有描述性属性名称的自定义类来重构此代码以使其更具可读性。
问题
是否有任何工具能够有效地支持这种重构操作?
答案 0 :(得分:4)
我认为这个答案并不完全是你所希望的,但是既然我去过那里,我想我会分享我的方式。
不幸的是,我没有找到使用某些工具完全自动化这种重构的方法。但是,我接近这个问题...
如果Tuples用于代表您现在要介绍的单个课程,那么您很幸运。我想情况并非如此,所以你必须做一些分类。
但首先要做的事情......
我查找了使用Ok()
的所有地方。
独立的Visual Studio和Resharper都可以使用 Find Usages 或 Find Usages Advanced (如果使用Tuple
创建元组)来帮助您。
否则或另外,您需要搜索Tuple.Create()
或new Tuple<
的解决方案。
根据该信息,确定需要引入的第一个类。
Tuple
...现在让它看起来像class
。 XML-Doc可以在以后在refatoring中处理类时提供帮助。
Tuple
class ClassThatWasMissing
{
/// <summary>
/// Represents some Property.
/// </summary>
int Item1 { get; set; }
/// <summary>
/// Represents some other Property.
/// </summary>
string Item2 { get; set; }
}
Tuple
- 创建
ClassThatWasMissing
- Tuple<int, string> myvar = new Tuple<int, string>();
+ ClassThatWasMissing myvar = new ClassThatWasMissing();
myvar.Item1 = 42;
myvar.Item2 = "Some information";
为属性(ClassThatWasMissing
)提供更多详尽的名称。上面的评论在这一点上可以派上用场。
同样,Resharper和独立的Visual Studio都可以提供帮助(例如R#:Refactor→Rename):
Item{n}
此时还要记住,有时在使用点而不是在声明点处应用名称可能更容易,因为在这些点上它们的目的可能更明显。 VS和R#都能够从那里重命名属性。
class ClassThatWasMissing
{
/// <summary>
/// Represents some Property.
/// </summary>
int SomeProperty { get; set; }
/// <summary>
/// Represents some other Property.
/// </summary>
string SomeOtherProperty { get; set; }
}
...对于您最初或已经发现的所有地方。这样做,直到没有ClassThatWasMissing myvar = new ClassThatWasMissing();
myvar.SomeProperty = 42;
myvar.SomeOtherProperty = "Some information";
s(或者至少只是你可以忍受的那些)。
答案 1 :(得分:0)
(访问 2021 年的问题)
如果可用,您可以重构为 c# 7+ Tuple types。
我认为该过程将有两个阶段:
Tuple<Type1, Type2 ...>
到 (Type1 Item1, Tupe2 Item2 ...)
Crtl+R
、Ctrl+R
)从 Item1
到 AmazingName
、Item2
到 EvenBetterName
、....< /li>