我在一個互操作場景中,因此我正在處理類似結構的結構和類在不同的程序集中使用 - 所以一個演員陣容是不夠的,必須手動場地,這是非常無聊和容易出錯。Linq查詢從對象B獲得具有相同名稱和類型的對象的屬性A
因此,我設計了一個功能,可以複製大量簡單的字段/屬性,而且我只處理困擾的字段/屬性。
當我這樣做屬性只,它工作正常。但我現在需要如何解決這個LiNQ
查詢,以便能夠從源對象中獲取字段列表並將它們與目標對象上的屬性連接起來。下面
代碼:
var TypeOrig = pSource.GetType();
var TypeDest = pTarget.GetType();
var TypeString = typeof(System.String);
var PropOrig = TipoOrig.GetFields(); // if it is GetProperties instead
// of GetFields works OK
var PropDest = TipoDest.GetProperties();
var QryPropVT =
from
POrig in PropOrig
join PDest in PropDest
on new
{
POrig.Name,
POrig.FieldType
} equals new
{
PDest.Name,
PDest.PropertyType
}
where POrig.PropertyType.IsValueType || (POrig.PropertyType.Equals(TipoString))
select new
{
PropO = POrig,
PropD = PDest
};
Visual C# error: Error 2 The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
編輯:我看到了價值注入,但它像使用死星殺蚊子... [/編輯]
他們會始終* *是在目標類型的原始類型和屬性字段?或者可能會有混合?另外,如果你遵循正常的.NET命名約定,並且使用'camelCase'作爲你的局部變量,你的代碼將更容易閱讀... – 2013-02-26 07:16:31
@JonSkeet:_或者可能有混合?_在創建這個函數中,I涵蓋了這兩種情況。 _你遵循正常的.NET命名約定_我每天都在三個不同的平臺上編程,當我必須從頭開始創建代碼時,我很努力地傳達了最近的慣例。最後,嘗試創造的混亂讓我選擇了一個慣例 - – 2013-02-26 13:05:30
@JonSkeet:(續)我可以不必停下來再調整:pascal對象。上面的代碼是我在工作中完成的真實代碼的摘錄。當我在SO上發佈時,我會嘗試傳達給.NET約定...... – 2013-02-26 13:12:03