[英]C# passing a list of strongly typed property names
我正在尋找一種方法將強類型屬性名稱列表傳遞到一個方法,然后我可以解析並獲取調用者感興趣的屬性。我想這樣做的原因是有一個復制方法,僅復制用戶指定的字段。 現在,該方法采用一個字符串列表與Getvalues一起使用,並在反射中獲取屬性方法,但我想防止重構屬性和開發人員未更新的字符串。
我在這里發現了這篇文章,但不幸的是,它沒有列表。 我可以這樣做:
public static void Copy(Expression<Func<TObject>> propertiesToCopy )
{
}
然后讓來電者做
PropertyCopier<List<string>>.Copy(() => data);
但是我必須指定調用者可以擁有的屬性數量:
public static void Copy(Expression<Func<TObject>> propertiesToCopy,Expression<Func<TObject>> propertiesToCopy2, Expression<Func<TObject>> propertiesToCopy3 )
{
}
這將允許三個屬性。 無論如何將其添加到List或Queryable <>以允許與調用者想要的屬性一樣多? 我嘗試使用Add in List並使用Expression
提前致謝
編輯:今晚我找到了一些文章,提到使用C# param關鍵字來實現這一目標。 有沒有更好或更有效的方法,或者這是最好的方法嗎?
使用params關鍵字定義一個采用可變數量參數的方法:
public static void PrintPropertyNames<T>(params Expression<Func<T, object>>[] properties)
{
foreach (var p in properties)
{
var expression = (MemberExpression)((UnaryExpression)p.Body).Operand;
string memberName = expression.Member.Name;
Console.WriteLine(memberName);
}
}
例如,您可以調用PrintPropertyNames方法傳遞兩個表達式:
PrintPropertyNames<FileInfo>(f => f.Attributes, f => f.CreationTime);
此示例將以下輸出顯示到控制台:
Attributes CreationTime
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.