Skip to content

Instantly share code, notes, and snippets.

@souri-t
Created April 7, 2023 11:53
Show Gist options
  • Save souri-t/12577b96a639bb3e09dc1ada8e4d939c to your computer and use it in GitHub Desktop.
Save souri-t/12577b96a639bb3e09dc1ada8e4d939c to your computer and use it in GitHub Desktop.
c
メンバーにサブクラスが含まれる場合、値が空でないことを確認するためには、サブクラスの各メンバーに対しても同様の処理を行う必要があります。また、個別にメンバーを見るよりも、反射を使用してクラスのすべてのメンバーをチェックすることができます。
以下は、反射を使用してクラスのすべてのメンバーが空でないことを確認するコードの例です。
```csharp
public static bool CheckAllMembersAreNotEmpty(object obj)
{
// オブジェクトがnullの場合はfalseを返す
if (obj == null)
{
return false;
}
// オブジェクトの型を取得する
Type type = obj.GetType();
// オブジェクトのすべてのメンバーを取得する
MemberInfo[] members = type.GetMembers(BindingFlags.Public | BindingFlags.Instance);
// 各メンバーの値が空でないことを確認する
foreach (MemberInfo member in members)
{
// フィールドまたはプロパティの場合
if (member.MemberType == MemberTypes.Field || member.MemberType == MemberTypes.Property)
{
// メンバーの値を取得する
object value = null;
if (member.MemberType == MemberTypes.Field)
{
value = ((FieldInfo)member).GetValue(obj);
}
else if (member.MemberType == MemberTypes.Property)
{
value = ((PropertyInfo)member).GetValue(obj);
}
// サブクラスの場合は再帰的にチェックする
if (value != null && value.GetType().IsClass && !value.GetType().IsPrimitive && value.GetType() != typeof(string))
{
if (!CheckAllMembersAreNotEmpty(value))
{
return false;
}
}
else
{
// 値が空であるかどうかをチェックする
if (value == null || (value.GetType() == typeof(string) && string.IsNullOrEmpty((string)value)))
{
return false;
}
}
}
}
// すべてのメンバーが空でない場合はtrueを返す
return true;
}
```
この例では、CheckAllMembersAreNotEmptyという静的メソッドを定義し、オブジェクトのすべてのメンバーが空でないかどうかを確認しています。反射を使用して、オブジェクトの型からすべてのメンバーを取得し、各メンバーの値が空でないことをチェックしています。サブクラスの場合は再帰的にチェックを行い、すべてのメンバーが空でない場合はtrueを返します。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment