Freigeben über


CodeAttribute2.AddArgument-Methode

Fügt dem Attribut ein Argument hinzu.

Namespace:  EnvDTE80
Assembly:  EnvDTE80 (in EnvDTE80.dll)

Syntax

'Declaration
Function AddArgument ( _
    Value As String, _
    Name As Object, _
    Position As Object _
) As CodeAttributeArgument
CodeAttributeArgument AddArgument(
    string Value,
    Object Name,
    Object Position
)
CodeAttributeArgument^ AddArgument(
    String^ Value, 
    [InAttribute] Object^ Name, 
    [InAttribute] Object^ Position
)
abstract AddArgument : 
        Value:string * 
        Name:Object * 
        Position:Object -> CodeAttributeArgument
function AddArgument(
    Value : String, 
    Name : Object, 
    Position : Object
) : CodeAttributeArgument

Parameter

  • Value
    Typ: String

    Erforderlich. Der Standardwert ist 0. Das Element, hinter dem das neue Element hinzugefügt werden soll. Wenn der Wert ein CodeElement ist, wird das neue Element hinter dem Argument CodeElement hinzugefügt. Wenn der Wert ein Long-Datentyp ist, gibt es das Element an, hinter dem das neue hinzugefügt werden soll. Da Auflistungen mit Eins beginnen, wird durch Übergabe des Werts 0 angegeben, dass das neue Element am Anfang der Auflistung eingefügt werden soll. Ein Wert von -1 bedeutet, dass das Argument am Ende platziert werden soll.

  • Name
    Typ: Object

    Erforderlich. Der Wert des Arguments.

  • Position
    Typ: Object

    Optional. Wenn das Argument ein benannter Parameter ist, enthält dieser Parameter den Namen des Arguments.

Rückgabewert

Typ: EnvDTE80.CodeAttributeArgument
Ein CodeAttributeArgument-Objekt.

Hinweise

Hinweis

Die Werte für Codeattributargumente werden nach der Zuweisung in Visual Studio nicht im Speicher beibehalten und sind daher bei einer künftigen Aktualisierung der Codeattributargumente möglicherweise gültig oder ungültig.Dies bedeutet, dass bei einem nachfolgenden Zugriff auf die Argumente unter Umständen E_FAIL oder ein vollkommen anderer Wert zurückgegeben wird. (Im Zusammenhang mit den untergeordneten Elementen des Elements tritt dieses Problem jedoch nicht auf.)

Aufgrund des nicht deterministischen Verhaltens sollten Sie den Wert des Arguments abrufen, bevor Sie ihn ändern.Wenn Sie beispielsweise ein Codeattributargument wie myAttrArg.Value = """a first value""" im Code festlegen, sollten Sie vor der entsprechenden Aktualisierung ausdrücklich auf das Argument verweisen, z. B. über myAttrArg = myAttr.Arguments.Item("first value"), und erst dann den neuen Wert myAttrArg.Value = """a second value""" zuweisen.Dadurch wird sichergestellt, dass das richtige Argument geändert wird.

Außerdem können die Werte von Codemodellelementen wie Klassen, Strukturen, Funktionen, Attributen, Delegaten usw. nach bestimmten Bearbeitungsvorgängen nicht deterministisch sein, d. h., dass nicht mehr davon ausgegangen werden kann, dass ihre Werte immer unverändert bleiben.Weitere Informationen finden Sie im Abschnitt zum Änderungsverhalten von Codemodellelementwerten unter Ermitteln von Code über das Codemodell (Visual Basic).

Beispiele

Im folgenden Beispiel werden in der aktuellen Klasse ein neuer Namespace und ein neues Attribut erstellt und einige der Attributeigenschaften aufgelistet.

public void CreateClassAndAttrib(DTE2 applicationObject)
{
    // Before running, load or create a project.
    FileCodeModel2 fcm2 = GetFileCodeModel(applicationObject);
    CodeAttribute2 cmAttribute;
    CodeClass2 cmClass;
    String msg = null;

    if (fcm2 != null)
    {
        CodeNamespace cmNamespace;
        // Try to create a new namespace.
        try
        {
            cmNamespace = fcm2.AddNamespace("CMNamespace", -1);
            // If successful, create the other code elements.
            if (cmNamespace != null)
            {
                cmClass = (CodeClass2)cmNamespace.AddClass("ANewClass", 
                -1, null, null, vsCMAccess.vsCMAccessPrivate);
                cmAttribute = (CodeAttribute2)cmClass.AddAttribute
                ("NewAttribute", "AttributeValue", -1);
                msg += "# of Arguments: " + cmAttribute.Arguments.Count 
                + Environment.NewLine;
                MessageBox.Show(msg);
                cmAttribute.AddArgument("NewAddedValue", null, null);
                msg += "# of Arguments: " + cmAttribute.Arguments.Count 
                + Environment.NewLine;
                MessageBox.Show(msg);                       
            }
            else
            {
                MessageBox.Show("Cannot continue - no filecodemodel 
                available.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("ERROR: " + ex);
        }
    }
}

public FileCodeModel2 GetFileCodeModel(DTE2 applicationObject)
{
    // Returns the FileCodeModel object of the active 
    // window.
    TextWindow txtWin = 
    (TextWindow)applicationObject.ActiveWindow.Object;
    FileCodeModel2 fcm2;
    if (txtWin != null)
    {
        try
        {
             fcm2 = (FileCodeModel2)txtWin.Parent.
             ProjectItem.FileCodeModel;
             return fcm2;
        }
        catch (Exception ex)
        {
             MessageBox.Show("ERROR: " + ex);
             return null;
        }
    }
    else
        return null;
}

.NET Framework-Sicherheit

Siehe auch

Referenz

CodeAttribute2 Schnittstelle

EnvDTE80-Namespace

Weitere Ressourcen

Gewusst wie: Kompilieren und Ausführen der Codebeispiele für das Automatisierungsobjektmodell

Ermitteln von Code über das Codemodell (Visual Basic)

Ermitteln von Code über das Codemodell (Visual C#)