Github user jorgebay commented on a diff in the pull request:
https://github.com/apache/tinkerpop/pull/792#discussion_r167847541
--- Diff: gremlin-dotnet/glv/generate.groovy ---
@@ -48,7 +48,7 @@ def toCSharpTypeMap = ["Long": "long",
"TraversalMetrics": "E2",
"Traversal": "ITraversal",
"Traversal[]": "ITraversal[]",
- "Predicate": "TraversalPredicate",
+ "Predicate": "object",
--- End diff --
Sorry, I've read it a while back when the pull request was first opened and
forgot about it :/
There are several consequences of using an untyped API for those methods:
- We are stuck maintaining an API for which we can't predict how its being
used (specially considering that db providers might support additional
functionality on top of the GLV).
- The user looses compile time checks.
- It will be hard for the user to find the correct expected type (`Lambda`)
and the error message on serialization might be unclear.
I think we should avoid using `object` for predicates.
We could use different workarounds for the `T` issue you highlighted above:
- Use a class for `T` (not an enum), properties like `T.Id` could return
instances of whatever interface we create for it. Given that java enums
functionality is more comprehensive than what C# currently supports, it makes
sense to use a class IMO.
- Generate the offending traversal methods manually.
---