Question

Je ne comprends pas comment fournir des types fortement dactylographiés via le fournisseur de type. Tous les exemples que je vois ont le même type, indépendamment de l'entrée.

MINICSVTYPEPROVIDER ne fournit que le double. RegexTypeProvider ne fournit que des correspondances.

Est-il possible de fournir des propriétés de différents Types en fonction Sur un paramètre fourni au fournisseur de type?

    if somevariable then 
        proptype = typeof<int>
    else
        proptype = typeof<string>

    let staticProp = ProvidedProperty(propertyName = "property", 
                                      propertyType = propType, 
                                      GetterCode= (fun [arg] -> <@@ %%arg :?> propType @@>))
Était-ce utile?

La solution

Oui, il est facile de fournir différents types en fonction de l'entrée. À titre d'exemple très simple, vous pouvez faire quelque chose comme:

let propType, propValue =
    if somevariable then
        typeof<int>, <@@ 1 @@>
    else
        typeof<string>, <@@ "test" @@>

let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue)

Pour étendre cela dans le sens que vous suggérez, vous pouvez définir l'intégralité du Getter dans le conditionnel:

let propType, propGetter =
    if somevariable then
        typeof<int>, fun [arg] -> <@@ %%arg : int @@>
    else
        typeof<string>, fun [arg] -> <@@ %%arg : string @@>

let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue)

Cependant, notez que vous devez ensuite vous assurer que la représentation sur laquelle vous appelez la propriété est un int ou string respectivement. Notez également que contrairement à la dénomination choisie (staticProp), ce ne sont pas des propriétés statiques, car vous passez un récepteur (arg) au Getter et n'a pas marqué le ProvidedProperty statique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top