[ 
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 2:40 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. 

 

General workaround could be using some nullable wrapper type in definition. For 
example:

enum Enum {

A = 1,

B = 2

}

struct NullableEnum {

1: Enum value

}

 

 


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) 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.

> 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)

Reply via email to