我有一个名为CheckedNumber
的结构。此类型用于属性:
`public IList<CheckedNumber> CheckedNumbers { get { return this._checkedNumbers; } }`
...保留一个数字列表。
我有另一个属性:
`public int? TheNumber { get { return this._theNumber; } }`
...并想检查CheckedNumbers
列表中是否存在其值。
这样:
if (this.CheckedNumbers.Contains(this.TheNumber)) { //... }
给出错误:
Argument 1: cannot convert from 'int?' to 'ProjectName.Models.CheckedNumber'
我怎么能转换int?到我的结构类型?
答案 0 :(得分:1)
好的,现在问题是略微更清楚 - 但从根本上说,您要问的是CheckedNumber
值列表是否包含特定的int?
值。这没有任何意义,因为int?
不是 CheckedNumber
- 这就像询问List<Fruit>
是否包含汽车一样。
如果部分或您的CheckedNumber
结构是int?
,您可能需要:
if (CheckedNumbers.Any(x => x.SomeProperty == TheNumber))
或者,可能想要:
if (CheckedNumbers.Contains(new CheckedNumber(TheNumber)))
否则,你必须进一步澄清这个问题。
答案 1 :(得分:0)
让CheckedNumber
实施IEquatable<CheckedNumber>
。然后,列表的Contains
方法可以使用此方法查找列表项。
public struct CheckedNumber : IEquatable<CheckedNumber>
{
public CheckedNumber(int? number)
{
_value = number;
}
private int? _value;
public int? Value { get { return _value; } }
public bool Equals(CheckedNumber other)
{
return _value == other._value;
}
}
现在,您可以将int?
转换为CheckedNumber
if (this.CheckedNumbers.Contains(new CheckedNumber(this.TheNumber))) {
//...
}