簡體   English   中英

C# 通過屬性名訪問屬性值

[英]C# accessing property values by property name

之前問過一個問題,但我的措辭不夠好。 我需要訪問 Mongo 數據庫構建器投影實例化中的屬性名稱。

與編碼出我想通過用戶選擇訪問該屬性的每一種可能性相比。 像這樣

   UserSubmittedModel s = new UserSubmittedModel
    {
      SensorDataChannelName = "AirTemp"
    };

  var projection = Builders<SensorData>.Projection.Include(u => u.GetType().GetProperty(s.SensorDataChannelName).GetValue(u, null)).Include(u => u.MainFileId).Include(u => u.UnixTime).Exclude(u => u.Id);

但是,我在執行此操作時反復遇到此錯誤

System.InvalidOperationException: 'Unable to determine the serialization information for u => u.GetType().GetProperty(value(Program+<>c__DisplayClass0_1).s.SensorDataChannelName).GetValue(u, null).'

我還深入研究了另一篇涉及此內容的帖子,他們從方法中返回,本質上是同一件事。 但我得到了相同的結果。

 static object GetPropValue(object target, string? propName)
{
   return target.GetType().GetProperty(propName).GetValue(target, null);
}

我想將用戶選擇轉換為 model 參數名稱,以便我可以投影並包含它。

根據上一個問題,我認為您正在嘗試根據所選值 ( s.SensorDataChannelName ) 從SensorData獲取屬性名稱。

MongoDB .NET 驅動程序文檔(投影定義生成器部分) ,您可以將字段名稱作為string傳遞,這是 lambda 表達式的替代方法。

var projection = Builders<Widget>.Projection.Include("X")
    .Include("Y")
    .Exclude("Id");

用這條線:

u.GetType().GetProperty(s.SensorDataChannelName).GetValue(u, null)

它返回u./* value of s.SensorDataChannelName */但不返回u中的屬性(名稱)。


您可以直接傳遞字段名稱,如下所示:

var projection = Builders<SensorData>.Projection
    .Include(s.SensorDataChannelName)
    // Following fields to be included / excluded
    ;

或者,如果您想先驗證屬性名稱:

string fieldName = typeof(SensorData).GetProperty(s.SensorDataChannelName)?.Name;

if (String.IsNullOrEmpty(fieldName))
{
    // TO-DO Handle Invalid field name
    return;
}

var projection = Builders<SensorData>.Projection
    .Include(fieldName)
    .Include(u => u.MainFileId)
    .Include(u => u.UnixTime)
    .Exclude(u => u.Id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM