1

カスタムタイプのジェネリック版リストがあります

List<MyType> list = new List<MyType>();

文字列またはMyTypeを比較した場合に機能するように、MyTypeの.Equalsをオーバーライドしました。私の質問は-リストにMyTypeのみが含まれている場合にList.Contains(string)を使用する方法はありますか?

私はそれを行うことができる他の方法があることを理解しています(たとえば、文字列の代わりにMyTypeオブジェクトを作成してから)、Listを拡張せずにそれを行う方法はありますか?

4

3 に答える 3

8

linqを使用します。

bool hasSugar = list.Any(i => i.Equals("sugar"));
于 2012-04-07T08:33:41.343 に答える
3

ヘドリアン、

Linqはこれを解決できますか?以下の私の例では、「MyType」は整数のリストですが、文字列値に対して「Contains」を実行して、フィルタリングされたリストを取得することができます。

using System.Collections.Generic;
using System.Linq;

List<int> list = new List<int>();

List<int> sList = (from s in list
where s.ToString().Contains("1")
select s).ToList();

お役に立てば幸いです。Linqの例を検索する必要があります。これは非常に強力です。

于 2012-04-07T09:33:23.470 に答える
0

カスタムタイプのインターフェイスを実装している場合は、ContainsをカスタムIEquatableで使用できます。特定のタイプに共通のIEquatableインターフェースを実装することができます。どちらも、idとして使用できる一意のint値を持っています。この場合、IEquatableを使用でき、実装本体では次のようになります。

class MyType1 : IEquatable<int>

bool IEqutabale<int>.Equals(int other)
{
    if (Id == other) return true;
    return false;
}

次に、次のように比較できます。

if (Type1List.Cast<IEquatable<int>>().Contains(type2Obj.Id)
{
   //write your code here
}

もう1つのオプションは、両方のタイプ間に直接等式を実装することです。あれは :

class MyType1 : IEquatable<MyType2>

bool IEquatable<MyType2>.IEquals(MyType2 other)
{
     //write equality logic here
}

次に、次のように比較できます。

if(Type1List.Cast<IEquatable<MyType2>>().Contains(type2Object))
{
    //write your code here
}
于 2016-11-30T10:38:05.767 に答える