DynamicObject.TrySetIndex(SetIndexBinder, Object[], Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die Implementierung für Vorgänge bereit, die einen Wert nach Index festlegen. Von der DynamicObject Klasse abgeleitete Klassen können diese Methode überschreiben, um dynamisches Verhalten für Vorgänge anzugeben, die auf Objekte durch einen angegebenen Index zugreifen.
public:
virtual bool TrySetIndex(System::Dynamic::SetIndexBinder ^ binder, cli::array <System::Object ^> ^ indexes, System::Object ^ value);
public virtual bool TrySetIndex(System.Dynamic.SetIndexBinder binder, object[] indexes, object value);
abstract member TrySetIndex : System.Dynamic.SetIndexBinder * obj[] * obj -> bool
override this.TrySetIndex : System.Dynamic.SetIndexBinder * obj[] * obj -> bool
Public Overridable Function TrySetIndex (binder As SetIndexBinder, indexes As Object(), value As Object) As Boolean
Parameter
- binder
- SetIndexBinder
Stellt Informationen zum Vorgang bereit.
- indexes
- Object[]
Die Indizes, die im Vorgang verwendet werden. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the DynamicObject class, indexes[0] is equal to 3.
- value
- Object
Der Wert, der auf das Objekt festgelegt werden soll, das den angegebenen Index aufweist. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the DynamicObject class, value is equal to 10.
Gibt zurück
true, wenn der Vorgang erfolgreich ist, andernfalls false. Wenn diese Methode zurückgegeben wird false, bestimmt der Laufzeitordner der Sprache das Verhalten. (In den meisten Fällen wird eine sprachspezifische Laufzeit ausnahme ausgelöst.
Beispiele
Gehen Sie davon aus, dass Sie ein Objekt erstellen möchten, in dem auf Eigenschaften entweder durch Namen wie Property0, Property1 usw. oder durch Index zugegriffen werden kann, sodass z. B. sampleObject.Property0sampleObject[0] in C# oder sampleObject(0) in Visual Basic entspricht.
Im folgenden Codebeispiel wird die SampleDynamicObject Klasse veranschaulicht, die von der DynamicObject Klasse abgeleitet wird. Die SampleDynamicObject-Klasse enthält ein Objekt des typs Dictionary<string, object> (Dictionary(Of String, Object) in Visual Basic), um die Schlüsselwertpaare zu speichern.
SampleDynamicObject überschreibt die TrySetIndex Und TryGetIndex Methoden, um den Zugriff nach Index zu ermöglichen. Er setzt die Methoden und TryGetMember Methoden TrySetMember außer Kraft, um den Zugriff nach Eigenschaftsnamen zu ermöglichen.
// The class derived from DynamicObject.
public class SampleDynamicObject : DynamicObject
{
// The inner dictionary to store field names and values.
Dictionary<string, object> dictionary
= new Dictionary<string, object>();
// Get the property value.
public override bool TryGetMember(
GetMemberBinder binder, out object result)
{
return dictionary.TryGetValue(binder.Name, out result);
}
// Set the property value.
public override bool TrySetMember(
SetMemberBinder binder, object value)
{
dictionary[binder.Name] = value;
return true;
}
// Set the property value by index.
public override bool TrySetIndex(
SetIndexBinder binder, object[] indexes, object value)
{
int index = (int)indexes[0];
// If a corresponding property already exists, set the value.
if (dictionary.ContainsKey("Property" + index))
dictionary["Property" + index] = value;
else
// If a corresponding property does not exist, create it.
dictionary.Add("Property" + index, value);
return true;
}
// Get the property value by index.
public override bool TryGetIndex(
GetIndexBinder binder, object[] indexes, out object result)
{
int index = (int)indexes[0];
return dictionary.TryGetValue("Property" + index, out result);
}
}
class Program
{
static void Test(string[] args)
{
// Creating a dynamic object.
dynamic sampleObject = new SampleDynamicObject();
// Creating Property0.
// The TrySetMember method is called.
sampleObject.Property0 = "Zero";
// Getting the value by index.
// The TryGetIndex method is called.
Console.WriteLine(sampleObject[0]);
// Setting the property value by index.
// The TrySetIndex method is called.
// (This method also creates Property1.)
sampleObject[1] = 1;
// Getting the Property1 value.
// The TryGetMember method is called.
Console.WriteLine(sampleObject.Property1);
// The following statement produces a run-time exception
// because there is no corresponding property.
//Console.WriteLine(sampleObject[2]);
}
}
// This code example produces the following output:
// Zero
// 1
' The class derived from DynamicObject.
Public Class SampleDynamicObject
Inherits DynamicObject
' The inner dictionary to store field names and values.
Dim dictionary As New Dictionary(Of String, Object)
' Get the property value.
Public Overrides Function TryGetMember(
ByVal binder As System.Dynamic.GetMemberBinder,
ByRef result As Object) As Boolean
Return dictionary.TryGetValue(binder.Name, result)
End Function
' Set the property value.
Public Overrides Function TrySetMember(
ByVal binder As System.Dynamic.SetMemberBinder,
ByVal value As Object) As Boolean
dictionary(binder.Name) = value
Return True
End Function
' Set the property value by index.
Public Overrides Function TrySetIndex(
ByVal binder As System.Dynamic.SetIndexBinder,
ByVal indexes() As Object, ByVal value As Object) As Boolean
Dim index As Integer = CInt(indexes(0))
' If a corresponding property already exists, set the value.
If (dictionary.ContainsKey("Property" & index)) Then
dictionary("Property" & index) = value
Else
' If a property does not exist, create it.
dictionary.Add("Property" & index, value)
End If
Return True
End Function
' Get the property value by index.
Public Overrides Function TryGetIndex(
ByVal binder As System.Dynamic.GetIndexBinder,
ByVal indexes() As Object, ByRef result As Object) As Boolean
Dim index = CInt(indexes(0))
Return dictionary.TryGetValue("Property" & index, result)
End Function
End Class
Sub Test()
' Creating a dynamic object.
Dim sampleObject As Object = New SampleDynamicObject()
' Creating Property0.
' The TrySetMember method is called.
sampleObject.Property0 = "Zero"
' Getting the value by index.
' The TryGetIndex method is called.
Console.WriteLine(sampleObject(0))
' Setting the property value by index.
' The TrySetIndex method is called.
' (This method also creates Property1.)
sampleObject(1) = 1
' Getting the Property1 value.
' The TryGetMember method is called.
Console.WriteLine(sampleObject.Property1)
' The following statement produces a run-time exception
' because there is no corresponding property.
' Console.WriteLine(sampleObject(2))
End Sub
' This code example produces the following output:
' Zero
' 1
Hinweise
Von der DynamicObject Klasse abgeleitete Klassen können diese Methode überschreiben, um anzugeben, wie Vorgänge, die auf ein Objekt mithilfe von Index zugreifen, für ein dynamisches Objekt ausgeführt werden sollen. Wenn die Methode nicht überschrieben wird, bestimmt der Laufzeitordner der Sprache das Verhalten. (In den meisten Fällen wird eine sprachspezifische Laufzeit ausnahme ausgelöst.)
Wenn diese Methode außer Kraft gesetzt wird, wird sie automatisch aufgerufen, wenn ein Vorgang wie sampleObject[3] = 10 in C# oder sampleObject(3) = 10 in Visual Basic ausgeführt wird, wobei sampleObject von der klasse DynamicObject abgeleitet wird.