我不知道如何通过类型提供程序提供强类型类型。 我看到的所有例子都与结果具有相同的类型,与输入无关。
MiniCsvTypeProvider仅提供双倍。 RegexTypeProvider仅提供匹配。
是否可以在提供给类型提供程序的参数上提供不同类型的属性?
if somevariable then
proptype = typeof<int>
else
proptype = typeof<string>
let staticProp = ProvidedProperty(propertyName = "property",
propertyType = propType,
GetterCode= (fun [arg] -> <@@ %%arg :?> propType @@>))
答案 0 :(得分:2)
是的,根据输入提供不同的类型很容易。作为一个非常简单的例子,您可以执行以下操作:
let propType, propValue =
if somevariable then
typeof<int>, <@@ 1 @@>
else
typeof<string>, <@@ "test" @@>
let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue)
要按照您建议的方式展开,您可以在条件中定义整个getter:
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)
但是,请注意,您需要确保您调用属性的表示形式分别为int
或string
。另请注意,与您选择的命名(staticProp
)相比,这些不是静态属性,因为您将接收器(arg
)传递给getter并且未标记{{1} }静态。