2014-02-25 60 views
1

假設我有和名爲MyExtensionMethod的擴展方法。獲取擴展方法被調用的引用的名稱

我想用這樣的:

var x = new MyClass() 
x.MyExtensionMethod() 

然後,擴展方法裏面,我想引用的名稱,它是呼籲:

public static void MyExtensionMethod(this object param) 
{ 
    //get the name "x" somehow 
} 

這是可能?

+0

你想得到實際的變量名? – Jonesopolis

+0

是的。這正是我想要的。 –

+0

我不相信你能做到這一點。你需要這樣做的情況是什麼? – Chris

回答

4

在C#中,這是不可能的。肯定可用的信息如下:

  1. 調用方法的名稱。
  2. 發生呼叫的文件的名稱。
  3. 呼叫的線路號碼。

來源:Caller Information (C# and Visual Basic)


如果你只是想簡化您的參數檢查,在以下文件夾中創建一個文件:

%USERPROFILE%\文件\的Visual Studio 2012 \代碼片段\ Visual C#\ My代碼片段

如果您有多個版本的Visual Studio或與2012不同的版本,應用程序其他版本將存在一個命名爲替代文件夾的文件夾。

將文件命名爲ThrowIfArgumentNull.snippet,其中包含以下內容。要使用它,請在編輯器中輸入tan,然後按兩次選項卡。您將獲得IntelliSense支持以輸入參數名稱,並且字符串參數將自動填入。這段代碼創建了一個標準的ArgumentNullException,但如果這是您的項目使用的類別,您可以修改它以使用GuardArgument類。

<?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> 
+0

這是當我說「一切都比預期好」時。我只是試圖簡化我的參數空檢查,而我學會了如何爲Visual Studio定義自定義代碼片段。 :) –