我有一个GinList类,我想比较类
的2个字符串列表public class GinList
{
public string GinName;
public string Country;
public string Abv;
public string Price;
public string Votes;
public string Stars;
public GinList(string ginName, string country, string abv, string price, string votes, string stars )
{
GinName = ginName;
Country = country;
Abv = abv;
Price = price;
Votes = votes;
Stars = stars;
}
}
然后我填写了gins List ..
public class TestScript : MonoBehaviour
{
public string ginString;
private List< GinList > sortedResults = new List< GinList >();
private List< GinList > gins = new List< GinList >();
private string[] splitGinString;
void Start ()
{
splitGinString = ginString.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
// build the new GinList()
for (var i = 0; i < splitGinString.Length-1; i++)
{
gins.Add(new GinList(splitGinString[i], splitGinString[i+1], splitGinString[i+2],
splitGinString[i+3], splitGinString[i+4], splitGinString[i+5]));
i+=6;
}
}
}
然后调试显示..
0是......第五场比赛 - 西班牙队 - 42.00% - £3.80 - 0 - 0
1是...... Biercee - 比利时 - 44.00% - £4.30 - 0 - 0
2是.. Blackwood - 苏格兰 - 40.00% - £3.60 - 0 - 0
3 is .. Blind Tiger - Piper Cubeba - 比利时 - 47.00% - £4.00 - 0 - 0
4是......布卢姆 - 英格兰 - 42.00% - £3.50 - 0 - 0
等..
然后我做了另一个List,Gins有一些缺失,然后尝试两个..
sortedResults = gins.Except( Gins ).ToList();
sortedResults = Gins.Except( gins ).ToList();
然后一个..
foreach(GinList gin in sortedResults)
{
Debug.Log("Sorted Gin number " + nextPos + " is .. " + gin.GinName + " - " + gin.Country + " - "
+ gin.Abv + " - " + gin.Price + " - " + gin.Votes + " - " + gin.Stars);
nextPos++;
}
但Debug显示完整的List,我做错了什么?感谢。
答案 0 :(得分:4)
您应该阅读documentation for Except:
默认的相等比较器Default用于比较实现IEqualityComparer泛型接口的类型的值。要比较自定义数据类型,您需要实现此接口并为该类型提供自己的GetHashCode和Equals方法。
简而言之,您需要在类型上实现相等方法。
在旁注中,您应该不使字段公开,而是使用属性来封装字段。您可以使用自动属性为您完成大部分工作,因此您不需要字段+属性。如果不应该在类外设置setter,也可以指定setter为private
。如果未在构造函数和之外设置c#6.0或更高版本,则可以一起省略set
。
同样如上所述,您应遵循常见的命名约定。对于属性使用pascal情况。
示例:字段_ginName
将成为属性GinName
。
public string GinName { get; set; }