转换并检查struct IList是否包含nullable int。 C#

时间:2012-11-22 16:25:43

标签: c# struct int nullable typeconverter

我有一个名为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?到我的结构类型?

2 个答案:

答案 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))) {
    //...
}