首頁 >後端開發 >C++ >如何在較舊的 C# 版本中實現類型安全的屬性名稱檢索?

如何在較舊的 C# 版本中實現類型安全的屬性名稱檢索?

DDD
DDD原創
2024-12-26 21:35:15997瀏覽

How Can I Achieve Type-Safe Property Name Retrieval in Older C# Versions?

C# 中缺少nameof 運算子的類型安全解決方法

nameof 運算符,傳回屬性名稱的字串表示形式,是最近添加到C# 中的。但是,早期版本的 C# 中缺少此運算子可能會成為類型安全資料綁定的障礙。

使用 Lambda 表達式的類型安全解決方案

一種解決方法針對這個問題的方法是使用lambda表達式來取得屬性名稱。這種方法確保類型安全,同時提供與 nameof 類似的功能。它的運作方式如下:

  1. 使用靜態 Property 方法定義一個名為 Nameof 的泛型類別。
  2. 在 Property 方法內,擷取所提供的 lambda 表達式的主體。
  3. 將主體轉換為MemberExpression 並從Member 中提取屬性名稱

範例用法

以下程式碼示範如何使用此程式解決方法解決方法:

class Program
{
    static void Main()
    {
        var propName = Nameof<Customer>.Property(e => e.Name);
        Console.WriteLine(propName);
    }
}

public class Nameof<T>
{
    public static string Property<TProp>(Expression<Func<T, TProp>> expression)
    {
        var body = expression.Body as MemberExpression;
        if(body == null)
            throw new ArgumentException("'expression' should be a member expression");
        return body.Member.Name;
    }
}

在此範例中,propName 將使用表達式e => 呼叫 Property 後包含字串「Name」 e.Name.

注意: 此解決方法需要 .NET 3.5 或更高版本。對於.NET 2.0,需要採用不同的方法。但是,如果不使用 lambda 表達式或反射,就不可能完全複製 nameof 的功能,而 .NET 2.0 不支援這兩者。

以上是如何在較舊的 C# 版本中實現類型安全的屬性名稱檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn