Created
April 7, 2023 11:53
-
-
Save souri-t/12577b96a639bb3e09dc1ada8e4d939c to your computer and use it in GitHub Desktop.
c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
メンバーにサブクラスが含まれる場合、値が空でないことを確認するためには、サブクラスの各メンバーに対しても同様の処理を行う必要があります。また、個別にメンバーを見るよりも、反射を使用してクラスのすべてのメンバーをチェックすることができます。 | |
以下は、反射を使用してクラスのすべてのメンバーが空でないことを確認するコードの例です。 | |
```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