我想知道为什么我无法比较这些对象:
public class myCustomClass
{
public string Value { get; set; }
public List<string> Keys { get; set; }
}
我收到了List<myCustomClass>
我创建了一个Comparer
,看起来像
var comparer = new myCustomClass{
Value = "somethingToCompare"
};
当MyList.Contains(comparer)
false
为MyList
时。
编辑:<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<div class="container">
<div class="row">
<div class="col-mid-offset-1 col-lg-offset-1 col-mid-5 col-lg-5">
<div class="form-group">
<div class="row">
<div class="col-xs-2">
<h5 class="pull-right">Land Area</h5></div>
<div class="col-xs-7">
<select class="form-control" id="mainSearch-unitSelect">
<option>1</option>
<option>2</option>
</select>
</div>
<div class="col-xs-2">
</div>
</div>
</div>
</div>
</div>
</div>
值有&#34; somethingToCompare&#34;,但我的比较器没有密钥所以它始终是假的。
我的问题是,我可以只比较我的列表中是否存在我的值,而不比较我的键吗?
答案 0 :(得分:1)
我假设MyQueryStringInfo
和myCustomClass
是一样的?
无论哪种方式,您都试图找到Value
"somethingToCompare"
对象的对象?
如果是这种情况,请尝试改为:
MyList.Any(item => item.Value == comparer.Value);
答案 1 :(得分:1)
目前,您的类不会覆盖Equals
,因此它会进行引用相等,显然comparer
包含的确切引用不在您的列表中。如果您只想在一个属性上进行比较,则可以使用Linq的Any
方法。
var hasIt = MyList.Any(m => m.Value == comparer.Value);
应该注意的是,即使您创建的comparer
Keys
设置为包含与您MyList
中的项目相同的订单中相同字符串的列表,{{1仍然不会返回true,因为它执行引用相等而不是值相等。
答案 2 :(得分:0)
这是&#34;用户&#34;的示例。对象:
List<User> usrs = new List<User>(); // assuming you have data
string emailToTest = "markAsAnswer@DevAffair.com";
bool valueExist = users.Where(x=>x.Email == emailToTest).Count() > 0;
试一试