728x90
반응형
728x170
■ dynamic 타입 객체의 속성 포함 여부를 구하는 방법을 보여준다.
▶ DynamicHelper.cs
using System.Dynamic;
using System.Linq.Expressions;
namespace TestProject;
public static class DynamicHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 멤버 소유 여부 구하기 - HasMember(dynamicObject, memberName)
/// <summary>
/// 멤버 소유 여부 구하기
/// </summary>
/// <param name="dynamicObject">동적 객체</param>
/// <param name="memberName">멤버명</param>
/// <returns>멤버 소유 여부</returns>
public static bool HasMember(object dynamicObject, string memberName)
{
return GetMemberNameEnumerable(dynamicObject).Contains(memberName);
}
#endregion
#region 멤버명 열거 가능형 구하기 - GetMemberNameEnumerable(dynamicObject)
/// <summary>
/// 멤버명 열거 가능형 구하기
/// </summary>
/// <param name="dynamicObject">동적 객체</param>
/// <returns>멤버명 열거 가능형</returns>
public static IEnumerable<string> GetMemberNameEnumerable(object dynamicObject)
{
IDynamicMetaObjectProvider provider = dynamicObject as IDynamicMetaObjectProvider;
if(provider == null)
{
throw new InvalidOperationException("제공된 개체는 dynamic 개체여야 합니다(즉, IDynamicMetaObjectProvider를 구현해야 함).");
}
DynamicMetaObject dynamicMetaObject = provider.GetMetaObject(Expression.Constant(provider));
IEnumerable<string> memberNameEnumerable = dynamicMetaObject.GetDynamicMemberNames();
return memberNameEnumerable;
}
#endregion
}
▶ Program.cs
using System.Dynamic;
namespace TestProject;
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
dynamic x = new ExpandoObject();
x.Name = "홍길동";
x.Age = "21";
if(DynamicHelper.HasMember(x, "Age"))
{
Console.WriteLine("Age = {0}", x.Age);
}
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] Exception 클래스 : InnerException/Message 속성을 사용해 전체 예외 메시지 구하기 (0) | 2022.10.02 |
---|---|
[C#/COMMON/.NET6] Exception 클래스 : GetBaseException 메소드를 사용해 최초 내부 예외 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] Exception 클래스 : InnerException 속성을 사용해 최초 내부 예외 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] URL 인코딩 사용하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] dynamic 타입 객체의 속성 포함 여부 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] BinaryWriter 클래스 : Write 메소드를 사용해 바이트 배열을 스트림에 쓰기 (0) | 2022.10.01 |
[C#/COMMON/.NET6] Environment 클래스 : GetEnvironmentVariable 정적 메소드를 사용해 사용자 임시 디렉토리 경로 구하기 (0) | 2022.10.01 |
[C#/COMMON/.NET6] Path 클래스 : GetTempPath 정적 메소드를 사용해 사용자 임시 디렉토리 경로 구하기 (0) | 2022.10.01 |
[C#/COMMON/.NET6] 특정 디렉토리에서 유일한 파일명 구하기 (0) | 2022.10.01 |
[C#/COMMON/.NET6] Path 클래스 : GetRandomFileName 정적 메소드를 사용해 임시 파일명 구하기 (0) | 2022.10.01 |
댓글을 달아 주세요