Proto3 C# Reference包含以下文字:
包装类型字段
proto3中的大多数众所周知的类型都不会影响代码生成, 但是包装器类型(StringWrapper,Int32Wrapper等)改变了 属性的类型和行为。
与C#值类型对应的所有包装类型 (
Int32Wrapper
,DoubleWrapper
,BoolWrapper
等)映射到Nullable<T>
其中T
是相应的非可空类型。对于 例如,类型为DoubleValue
的字段会生成类型的C#属性Nullable<double>
。
StringWrapper
或BytesWrapper
类型的字段会产生C#属性 已生成string
和ByteString
类型,但具有默认值 值null
,并允许null
设置为属性值。对于所有包装器类型,重复时不允许使用空值 字段,但允许作为地图条目的值。
尝试从.cs
文件生成.proto
文件时,如果我尝试在Int32Wrapper
文件中将字段声明为.proto
,则protoc.exe会抛出关于Int32Wrapper
不存在的错误。
syntax ="proto3";
package prototest;
import "MessageIdentifier.proto";
message TestMessage {
string messageTest = 1;
fixed64 messageTimestampTicks = 2;
uint32 sequenceNumber = 3;
MessageUniqueID uniqueID = 4;
Int32Wrapper nullableInt = 5;
}
这里似乎缺少一些额外的步骤,是否有人知道如何启用这些类型?
答案 0 :(得分:1)
您需要导入google / protobuf / wrappers.proto才能生效。
syntax ="proto3";
package prototest;
import "MessageIdentifier.proto";
import "google/protobuf/wrappers.proto";
message TestMessage {
string messageTest = 1;
fixed64 messageTimestampTicks = 2;
uint32 sequenceNumber = 3;
MessageUniqueID uniqueID = 4;
google.protobuf.Int32Wrapper nullableInt = 5;
}
然后你可以将它用作int吗? ,例如nullableInt.HasValue和nullableInt.Value
答案 1 :(得分:1)
我将努力改善Nick的答案,因为它没有帮助我。
grpc编译器声称他没有有关google.protobuf.Int32Wrapper类型的信息。我在Microsoft文档中发现它被称为function getDaysArray(year, month) {
var numDaysInMonth, daysInWeek, daysIndex, index, i, l, daysArray;
numDaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
daysInWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
daysIndex = { 'Sun': 0, 'Mon': 1, 'Tue': 2, 'Wed': 3, 'Thu': 4, 'Fri': 5, 'Sat': 6 };
index = daysIndex[(new Date(year, month - 1, 1)).toString().split(' ')[0]];
daysArray = [];
for (i = 0, l = numDaysInMonth[month - 1]; i < l; i++) {
var d=new Date(year+"-"+month+"-"+(i + 1))
if(!(d.getDay()==0 || d.getDay()==6)){
console.log(d)
daysArray.push({
"title":"Turn",
"resourceid":"4",
"start":year+"-"+month+"-"+(i + 1)+"+"+"08:00:00",
"end":year+"-"+month+"-"+(i + 1)+"+"+"14:00:00",
"internals": ground[i] // people from array to assign at specific date
});
}
if (index == 7) index = 0;
}
return daysArray;
}
console.log(getDaysArray(2019, 12));
(prooflink https://docs.microsoft.com/en-us/dotnet/architecture/grpc-for-wcf-developers/protobuf-data-types#nullable-types),尽管Google确实将其称为google.protobuf.Int32Value
。
因此,对我有帮助的代码如下:
Int32Wrapper