You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Konstantin (Jira)" <ji...@apache.org> on 2019/11/29 13:58:00 UTC
[jira] [Comment Edited] (THRIFT-5040) Optional fields for value
types are not Nullable in C# (netstd)
[ https://issues.apache.org/jira/browse/THRIFT-5040?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16985037#comment-16985037 ]
Konstantin edited comment on THRIFT-5040 at 11/29/19 1:57 PM:
--------------------------------------------------------------
Well, that brakes the behavior between Java and C# implementations in Java we have nullable enums and in C# not. So when we send not set enum value (null) from Java in .net we receive default(Enum) instead of null. That is terribly unexpected
I think that there should be an option to solve that kind of problem, and this case must be documented.
was (Author: kpozdniakov):
Well, that brakes the behavior between Java and C# implementations in Java we have nullable enums and in C# not. So when we send not set enum value (null) from Java in .net we receive default(Enum) and not null. That is terribly unexpected
I think that there should be an option to solve that kind of problem, and this case must be documented.
> Optional fields for value types are not Nullable in C# (netstd)
> ---------------------------------------------------------------
>
> Key: THRIFT-5040
> URL: https://issues.apache.org/jira/browse/THRIFT-5040
> Project: Thrift
> Issue Type: Wish
> Components: netstd - Compiler
> Affects Versions: 0.13.0
> Reporter: Konstantin
> Priority: Major
>
> Optional fields for value types are not Nullable in C# (netstd)
> for example
> {code:java}
> struct Test {
> 1: required i64 id,
> 2: optional bool some_flag
> }
> {code}
> will generate class
> {code:java}
> public partial class Test : TBase{
> private bool _some_flag;
> public long Id { get; set; }
> public bool Some_flag { get { return _some_flag; } set { __isset.some_flag = true; this._some_flag = value; } }
> {code}
> that makes the some_flag to be false even if it was not set on the sending party.
>
> The optional value types should be generated as Nullable<T>:
> {code:java}
> private bool? _some_flag;
> {code}
>
> This is especially harmful with other value types like int, enums, etc...
--
This message was sent by Atlassian Jira
(v8.3.4#803005)