DynamicObject.TryGetIndex(GetIndexBinder, Object[], Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje implementaci pro operace, které získají hodnotu podle indexu. Třídy odvozené z DynamicObject třídy mohou přepsat tuto metodu k určení dynamického chování pro operace indexování.
public:
virtual bool TryGetIndex(System::Dynamic::GetIndexBinder ^ binder, cli::array <System::Object ^> ^ indexes, [Runtime::InteropServices::Out] System::Object ^ % result);
public virtual bool TryGetIndex (System.Dynamic.GetIndexBinder binder, object[] indexes, out object result);
public virtual bool TryGetIndex (System.Dynamic.GetIndexBinder binder, object[] indexes, out object? result);
abstract member TryGetIndex : System.Dynamic.GetIndexBinder * obj[] * obj -> bool
override this.TryGetIndex : System.Dynamic.GetIndexBinder * obj[] * obj -> bool
Public Overridable Function TryGetIndex (binder As GetIndexBinder, indexes As Object(), ByRef result As Object) As Boolean
Parametry
- binder
- GetIndexBinder
Poskytuje informace o operaci.
- indexes
- Object[]
Indexy, které se používají v operaci. Například pro sampleObject[3]
operaci v jazyce C# (sampleObject(3)
v jazyce Visual Basic), kde sampleObject
je odvozená z DynamicObject
třídy , indexes[0]
se rovná 3.
- result
- Object
Výsledek operace indexu.
Návraty
true
pokud je operace úspěšná; v opačném případě . false
Pokud tato metoda vrátí false
, pořadač běhu jazyka určuje chování. (Ve většině případů se vyvolá výjimka za běhu.)
Příklady
Předpokládejme, že chcete vytvořit objekt, ve kterém lze k vlastnostem přistupovat buď podle názvů Property0
, Property1
, a tak dále, nebo indexem, takže je například sampleObject.Property0
ekvivalentní sampleObject[0]
v jazyce C# nebo sampleObject(0)
v jazyce Visual Basic.
Následující příklad kódu ukazuje SampleDynamicObject
třídu, která je odvozena z DynamicObject třídy . Třída SampleDynamicObject
obsahuje objekt Dictionary<string, object>
typu (Dictionary(Of String, Object)
v jazyce Visual Basic) pro uložení párů klíč-hodnota. SampleDynamicObject
přepisuje TrySetIndex metody a TryGetIndex pro povolení přístupu podle indexu. Přepíše TrySetMember metody a TryGetMember pro povolení přístupu podle názvu vlastnosti.
// 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
Poznámky
Třídy odvozené z DynamicObject třídy mohou přepsat tuto metodu a určit, jak se má pro dynamický objekt provést získání hodnoty indexem. Pokud metoda není přepsána, pořadač za běhu jazyka určuje chování. (Ve většině případů se vyvolá výjimka za běhu.)
Pokud je tato metoda přepsána, je automaticky vyvolána, pokud máte operaci jako sampleObject[3]
v jazyce C# nebo sampleObject(3)
v jazyce Visual Basic, kde sampleObject
je odvozena z DynamicObject třídy .