bugfix> c# > 投稿

C#では、文字列のクラスツリーパスを読み取り、そのクラスのインスタンスを指定して、プログラムで値にアクセスできますか?

例えば:

public class LogGeometricModel
{
  public double SmallEndDiameter { get; set; }
  public double LargeEndDiameter { get; set; }
public class Log
{
  public Guid Id { get; set; }
  public LogGeometricModel GeometricModel { get; set; }
}
public class Solution
{
  public DateTime TimeStamp { get; set; }
  public double Price { get; set; }
  public Log RotatedLog { get; set; }
}

文字列は次のようになります(クラスツリーのパス):

SmallEndDiameter = "Solution/RotatedLog/GeometricModel/SmallEndDiameter"

LargeEndDiameter = "Solution/RotatedLog/GeometricModel/LargeEndDiameter"

価格 =「ソリューション/価格」

Id =「ソリューション/ログ/ ID」

これらの文字列を読み取ることで、SmallEndDiameter、LargeEndDiameter、Price、およびIdの実際の値にアクセスしたいと思います。

回答 1 件
  • はい、可能です。

    public static object GetValue(object instance, string path)
    {
        object currentObject = instance;
        foreach (string propertyName in path.Split('/'))
        {
            currentObject = currentObject
                .GetType()
                .GetProperty(propertyName)
                .GetValue(currentObject, null);
        }
        return currentObject;
    }
    
    

    文字列に「ソリューション」を含める必要はありません。これには明らかにエラー処理が欠けているため、このような文字列を解析する場合は必要になります。

あなたの答え