DynamicObject.TrySetIndex(SetIndexBinder, Object[], Object) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller implementeringen för åtgärder som anger ett värde per index. Klasser som härleds från klassen kan åsidosätta den DynamicObject här metoden för att ange dynamiskt beteende för åtgärder som har åtkomst till objekt med ett angivet index.
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
Parametrar
- binder
- SetIndexBinder
Innehåller information om åtgärden.
- indexes
- Object[]
De index som används i åtgärden. För åtgärden sampleObject[3] = 10 i C# (sampleObject(3) = 10 i Visual Basic) där sampleObject härleds från klassen DynamicObject är indexes[0] lika med 3.
- value
- Object
Värdet som ska anges till det objekt som har det angivna indexet. För åtgärden sampleObject[3] = 10 i C# (sampleObject(3) = 10 i Visual Basic) där sampleObject härleds från klassen DynamicObject är value lika med 10.
Returer
trueom åtgärden lyckas. annars . false Om den här metoden returnerar falseavgör körningsbindaren för språket beteendet. (I de flesta fall utlöses ett språkspecifikt körningsfel.
Exempel
Anta att du vill skapa ett objekt där egenskaper kan nås antingen med namn som Property0, Property1 och så vidare, eller efter index, så att till exempel sampleObject.Property0 motsvarar sampleObject[0] i C# eller sampleObject(0) i Visual Basic.
I följande kodexempel visas SampleDynamicObject klassen, som härleds från DynamicObject klassen. Klassen SampleDynamicObject innehåller ett objekt av typen Dictionary<string, object> (Dictionary(Of String, Object) i Visual Basic) för att lagra nyckel/värde-paren.
SampleDynamicObject åsidosätter TrySetIndex metoderna och TryGetIndex för att aktivera åtkomst efter index. Den åsidosätter TrySetMember metoderna och TryGetMember för att aktivera åtkomst efter egenskapsnamn.
// 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
Kommentarer
Klasser som härleds från klassen kan åsidosätta den DynamicObject här metoden för att ange hur åtgärder som ska komma åt ett objekt efter index ska utföras för ett dynamiskt objekt. När metoden inte åsidosättas avgör körningsbindaren för språket beteendet. (I de flesta fall utlöses ett språkspecifikt körningsfel.)
Om den här metoden åsidosätts anropas den automatiskt när du har en åtgärd som sampleObject[3] = 10 i C# eller sampleObject(3) = 10 i Visual Basic, där sampleObject härleds från klassen DynamicObject.