說的返回類型我有一個Expression<Func<T,object>>
是否有可能動態地改變根據Type
變量返回類型是像Expression<Func<T,int>>
改變的表達<func<>>
我有下面的類:
public class ImportCheck<T> {
public int id { get; set; }
public string Name { get; set; }
public Type Type { get; set; }
public bool Required { get; set; }
public int? MinLength { get; set; }
public int? MaxLength { get; set; }
public string Value { get; set; }
public Expression<Func<T, object>> AssociatedProperty { get; set; }
}
我有一個List<ImportCheck<Contact>>
我循環,併爲每個設置Contact
對象屬性(屬性都是不同的類型)。爲了使我能夠設置嵌套對象的屬性,我需要結果類型與目標類型相同。 如果聯繫人的所有屬性都是int
,那麼我現在擁有的工作將會很好,這是因爲我有一個不同類型的列表導致我很頭疼。
這是如何設置的子屬性:
private static Action<M, R> MakeSet<M, R>(Expression<Func<M, R>> fetcherExp) {
if (fetcherExp.Body.NodeType != ExpressionType.MemberAccess) {
throw new ArgumentException(
"This should be a member getter",
"fetcherExp");
}
// Input model
var model = fetcherExp.Parameters[0];
// Input value to set
var value = Expression.Variable(typeof(R), "v");
// Member access
var member = fetcherExp.Body;
// We turn the access into an assignation to the input value
var assignation = Expression.Assign(member, value);
// We wrap the action into a lambda expression with parameters
var assignLambda = Expression.Lambda<Action<M, R>>(assignation, model, value);
return assignLambda.Compile();
}
這被稱爲然後像MakeSet(member)(target,value)
其中構件是Expression<Func<T,object>>
target
是對象和value
是將屬性設置爲值。
你可以在你試圖做更詳細的?特別是包括不完全符合你想要的示例代碼? –
你能舉一個試圖設置子屬性的例子嗎?特別是,這是明確的逐案代碼,還是以某種方式推廣? –
@EamonNerbonne增加了一些關於我如何設置屬性的細節。由於我的表達結果是一個對象,這是通過一個UnaryExpression而不是一個MemberExpression這是什麼導致我的問題 – Gazeth