包含不像我预期的那样工作

时间:2016-02-04 12:47:21

标签: c#

我想知道为什么我无法比较这些对象:

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) falseMyList时。

编辑:<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;,但我的比较器没有密钥所以它始终是假的。

我的问题是,我可以只比较我的列表中是否存在我的值,而不比较我的键吗?

3 个答案:

答案 0 :(得分:1)

我假设MyQueryStringInfomyCustomClass是一样的?

无论哪种方式,您都试图找到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;

试一试