假設我有和名爲MyExtensionMethod的擴展方法。獲取擴展方法被調用的引用的名稱
我想用這樣的:
var x = new MyClass()
x.MyExtensionMethod()
然後,擴展方法裏面,我想引用的名稱,它是呼籲:
public static void MyExtensionMethod(this object param)
{
//get the name "x" somehow
}
這是可能?
假設我有和名爲MyExtensionMethod的擴展方法。獲取擴展方法被調用的引用的名稱
我想用這樣的:
var x = new MyClass()
x.MyExtensionMethod()
然後,擴展方法裏面,我想引用的名稱,它是呼籲:
public static void MyExtensionMethod(this object param)
{
//get the name "x" somehow
}
這是可能?
在C#中,這是不可能的。肯定可用的信息如下:
來源:Caller Information (C# and Visual Basic)
如果你只是想簡化您的參數檢查,在以下文件夾中創建一個文件:
%USERPROFILE%\文件\的Visual Studio 2012 \代碼片段\ Visual C#\ My代碼片段
如果您有多個版本的Visual Studio或與2012不同的版本,應用程序其他版本將存在一個命名爲替代文件夾的文件夾。
將文件命名爲ThrowIfArgumentNull.snippet,其中包含以下內容。要使用它,請在編輯器中輸入tan
,然後按兩次選項卡。您將獲得IntelliSense支持以輸入參數名稱,並且字符串參數將自動填入。這段代碼創建了一個標準的ArgumentNullException
,但如果這是您的項目使用的類別,您可以修改它以使用Guard
或Argument
類。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>Throw if argument null</Title>
<Author>Sam Harwell</Author>
<Description>Throw an ArgumentNullException if the specified argument is null.</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>tan</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>arg</ID>
<ToolTip>arg</ToolTip>
<Default>arg</Default>
<Function>
</Function>
</Literal>
<Literal Editable="false">
<ID>ArgumentNullException</ID>
<ToolTip>ArgumentNullException</ToolTip>
<Default>ArgumentNullException</Default>
<Function>SimpleTypeName(global::System.ArgumentNullException)</Function>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[if ($arg$ == null)
throw new $ArgumentNullException$("$arg$");$end$]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
這是當我說「一切都比預期好」時。我只是試圖簡化我的參數空檢查,而我學會了如何爲Visual Studio定義自定義代碼片段。 :) –
你想得到實際的變量名? – Jonesopolis
是的。這正是我想要的。 –
我不相信你能做到這一點。你需要這樣做的情況是什麼? – Chris