User(Base Class)というエンティティがあります。これには、Admin、Manager、Memberの3つの子エンティティがあります。
すべてのユーザーを選択することで、特定のユーザーが管理者、マネージャー、またはメンバーであることをどのように知ることができますか。管理者、マネージャー、またはメンバーを表示する必要があるタイプとして、名前の列を使用してグリッド内のすべてのユーザーデータを表示する必要があります
User(Base Class)というエンティティがあります。これには、Admin、Manager、Memberの3つの子エンティティがあります。
すべてのユーザーを選択することで、特定のユーザーが管理者、マネージャー、またはメンバーであることをどのように知ることができますか。管理者、マネージャー、またはメンバーを表示する必要があるタイプとして、名前の列を使用してグリッド内のすべてのユーザーデータを表示する必要があります
これに対する完全な解決策は次のとおりです。インスタンスごとにGetType()メソッドを呼び出すだけです
そして出力は
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestBaseUserConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var users = new List<User>
{
new User {Name = "User1"},
new Manager {Name = "User2"},
new Member {Name = "User3"},
new Student {Name = "User4"}
};
users.Select(p => new { p, UserTpe = p.GetType().Name })
.ToList()
.ForEach(t => Console.WriteLine("User Name = {0}, User Type = {1}", t.p.Name, t.UserTpe));
Console.ReadLine();
}
}
public class User
{
public string Name { get; set; }
}
public class Manager : User { }
public class Member : User { }
public class Student : User { }
}
Enumerable.OfTypeメソッドを使用して、正確なクラスのアイテムのサブコレクションを抽出できます。
collection.OfType<Admin>().ToList()
または、is演算子を使用して各項目をチェックすることもできます。
foreach(User item in collection)
{
if(item is Admin)
{
}
else
...
}