我有数据结构,其中大多数属性与另一个表相同。我有Component1,Code1,Description1和Argument1,我有相同的东西,但来自不同的表(Component2,Code2,Description2和Argument2)。此属性可以相同也可以不必。
第一个表是新导入的数据,第二个表是旧数据。现在我需要比较这些数据并根据某些逻辑采用一个或另一个。我需要这种数据结构的一个重要原因是因为我需要检查Code1是否等于Code2(参数,组件和描述相同)。
public class ImportData
{
private int id { get; set; }
private int Component1 { get; set; }
private int Component2 { get; set; }
private string Code1 { get; set; }
private string Code2 { get; set; }
private string Description1 { get; set; }
private string Description2 { get; set; }
private string Argument1 { get; set; }
private string Argument2 { get; set; }
private bool isValid { get; set; }
}
我觉得必须有更好的方法来做到这一点。我不喜欢有2次这么多“相同”的属性。我打算有List,我没有一个对象,但这个对象的列表很长。任何的想法? 感谢帮助。
答案 0 :(得分:2)
如果我是你,我会创建一个代表一对对象的新类:
public class Pair<T>
{
public T Item1 { get; set; }
public T Item2 { get; set; }
}
(或者如果你想让它不可变,删除set
并添加一个将两个项目作为参数的构造函数)
然后您可以按如下方式定义ImportData
:
public class ImportData
{
private int id { get; set; }
private Pair<int> Component { get; set; }
private Pair<string> Code { get; set; }
private Pair<string> Description { get; set; }
private Pair<string> Argument { get; set; }
private bool isValid { get; set; }
}
仅此一点就可以使您的代码更具可读性,这是一件好事。但是,您可以向Pair
类添加额外的实用程序成员,例如ItemsAreEqual
,这将有助于您防止代码重复。
更新:作为创建Pair
课程的替代方法,请查看已有的Tuple class。
答案 1 :(得分:1)
你正在努力使事情更短,但不一定能够或者必须更短。你的论点是你可以为所有字段设置单独的值,并且你们都需要比较它们,实际上告诉所有这些字段需要在那里。
为了使其更加优化,您可以添加第二个课程<div class="container text-center">
<h2> </h2>
<h2> <strong>IPhone 6 features image gallery </strong></h2>
<div class="carousel slide" id="screenshot-carousel" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#screenshot-carousel" data-slide-to="0" class="active"></li>
<li data-target="#screenshot-carousel" data-slide-to="1"></li>
<li data-target="#screenshot-carousel" data-slide-to="2"></li>
<li data-target="#screenshot-carousel" data-slide-to="3"></li>
<li data-target="#screenshot-carousel" data-slide-to="4"></li>
<li data-target="#screenshot-carousel" data-slide-to="5"></li>
<li data-target="#screenshot-carousel" data-slide-to="6"></li>
<li data-target="#screenshot-carousel" data-slide-to="7"></li>
</ol>
<div class="carousel-inner">
<div class="item active">
<img src="http://lorempixel.com/400/400/sports/1" alt="Introducing the new IPhone 6 & IPhone 6 Plus">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/2" alt="All new sensors">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/3" alt="Improved camera">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/8" alt="Security. Right at your fingertip with Touch ID">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/4" alt="Introducing the new IOS">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/5" alt="Extremely thin">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/6" alt="Hugely powerpul and enormously efficient">
<div class="carousel-caption">
</div>
</div>
<div class="item">
<img src="http://lorempixel.com/400/400/sports/7" alt="Bigger screen">
<div class="carousel-caption">
</div>
</div>
<a href="#screenshot-carousel" class="left carousel-control" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a href="#screenshot-carousel" class="right carousel-control" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</div>
</div>
,您将在课程中引用它:
Data
原来的课程:
public class Data
{
private int Component { get; set; }
private string Code { get; set; }
private string Description { get; set; }
private string Argument { get; set; }
}
一个好处是,您可以在public class ImportData
{
private int id { get; set; }
private Data Left { get; set; }
private Data Right { get; set; }
private bool IsValid { get; set; }
}
课程中派生Equals
,这样您就可以轻松地比较它们以检查它们的平等性。
答案 2 :(得分:1)
您可以只创建一次属性类并实现IComparable接口。
public class Data : IComparable
{
public int Component { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public string Argument { get; set; }
public int CompareTo(object obj) {
var other = obj as Data;
if(other == null)
{
throw new ArgumentException("Object is not Data");
}
else
{
//compare current instance to other here...
}
}
}