簡體   English   中英

.NET 4.0中的CallerMemberName無法正常工作

[英]CallerMemberName in .NET 4.0 not working

我試圖通過BCL可移植包在.NET 4.0中使用CallerMemberName屬性。 它總是返回一個空字符串而不是成員名稱。 我究竟做錯了什么?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        MessageBox.Show(new class2().CallMe);
    }
}

public class class2
{
    public string CallMe 
    {
        get
        {
            return HelpMe();
        }
    }

    private string HelpMe([CallerMemberName] string param = "")
    {
        return param;
    }
}

如果添加以下內容,定位4.0的工作正常:

namespace System.Runtime.CompilerServices {
    sealed class CallerMemberNameAttribute : Attribute { }
}

我找到了解決方案,雖然它對我沒用。 您需要在.NET Framework 4之上安裝KB2468871才能使用調用方信息屬性。 不幸的是,我不能要求每個開發人員在設置開發環境時都記得安裝它。

據我所知,.Net 4.5支持CallerMemberName你不應該在.Net 4.0中使用它

有人使用StackTrace在.Net 4.0中實現了這一點。 例如: http//www.journeyintocode.com/2013/04/callermembername-net-40.html

但是,我不建議您使用StackTrace,因為可能會有性能損失。 使用StackTrace獲取調用者名稱非常慢。 這在Debug中有效,在發布時你無法確定StackTrace是否“正確”。

所以,我的建議是:只需在.Net 4.5或更高版本中使用CallerMemberName 在.Net的早期版本中,沒有任何萬無一失或快速的方法。

暫無
暫無

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

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