私はMyUser
クラスに汎用識別子型を持っています。 UserManager
クラスには、GetByIdentifier
メソッドがあります。このメソッドは、指定された識別子を既知のユーザー識別子と比較します。問題は、私は次のエラーを取得することです:シンプルジェネリック型compare
public MyUser<TIdentifier>
{
public TIdentifier Identifier { get; set; }
}
public class UserManager<TUser, TUserIdentifier>
where TUser : MyUser<TUserIdentifier>
{
protected List<TUser> userStore = new List<TUser>();
protected TUser GetByIdentifier(TUserIdentifier identifier)
{
return userStore.FirstOrDefault(c => c?.Identifier == identifier);
}
}
私はもう、int
としてTUserIdentifier
としてstring
電気ショック療法を単純型を定義することはできません以下にUserManager
の署名を変更
。Operator '==' cannot be applied to operands of type 'TUserIdentifier' and 'TUserIdentifier'
public class UserManager<TUser, TUserIdentifier>
where TUser : MyUser<TUserIdentifier>
where TUserIdentifier : class
回避策はInteger
、String
などのクラスを使用することです。
私がやってみましたもう一つは、以下の署名であるが、それは
public class UserManager<TUser, TUserIdentifier>
where TUser : MyUser<TUserIdentifier>
where TUserIdentifier : IComparable
を動作しませんでした私はInteger
、String
などのクラスのために行くか、別の方法がありますでしょうか?
http://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c – CodeCaster
@CodeCasterこの投稿を理解すると、基本的には参照型コンパイラがその型が同等であることを知ることができます(演算子は適用できます)。したがって、int、stringなどの参照型実装を使用する必要があります。そうですか? – NtFreX
さらに、TUserIdentifier:オブジェクトのどこにでも使用できます。これは私が思うように動作するはずです。 – Sebi