我有一个标志属性枚举,它位于Web服务后面,如下所示:
[Serializable,Flags]
public enum AccessLevels
{
None = 0,
Read = 1,
Write = 2,
Full = Read | Write
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我的网络服务的消费者没有枚举的原始常量值.生成的代理类客户端端具有以下内容:
{
None = 1,
Read = 2,
Write = 4,
Full = 8
}
Run Code Online (Sandbox Code Playgroud)
因此,当消费者检查"读取"访问时,即使"testItem"为"Full",这也将是假的.
((testItem & Svc.Read) == Svc.Read)
Run Code Online (Sandbox Code Playgroud)
如何通过Web服务正确提供标志?
编辑:
根据这篇文章,我可能无法做我想做的事情.Ivan Krivyakov说
Enum的透明度不完美
事实证明,枚举并不像我们希望的那样透明.有三个棘手的问题:
- 如果服务器端代码声明枚举并为其成员分配特定的数值,则客户端将无法看到这些值.
- 如果服务器端代码声明带有"复合"掩码值的[Flags]枚举(如白色=红色|绿色|蓝色),则它在客户端没有正确反映.
- 如果服务器或客户端发送超出枚举范围的"非法"值,则会在另一侧的XML反序列化器中导致异常.
所以我想知道这只是一个限制,是不可能的.
在我的键盘钩子中,每个按键都会获得一个标志,指示它是否被注入. http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspx
我从lParam中提取了一个KBDLLHOOKSTRUCT.我可以访问kbd.flags.XXX.我只是不知道如何将这个8位标志转换为if (injected) {...我知道如何使用的条件类型.
如果你们中的一个聪明的计算机科学类型会帮助我,我会非常感激.
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, kbd);
//if (injected) {...
Run Code Online (Sandbox Code Playgroud)
干杯!
我理解Enums如何在C#中工作,我得到了Flags属性带给表的内容.
我在这里看到了这个问题.推荐第一种口味,但没有提供任何理由/理由.
这两个定义的方式有什么不同,一个比另一个好吗?使用第一个synax代替第二个synax有什么好处?在定义Flags类型Enums时,我总是使用第二种风格......我一直都在做错吗?
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1 << 0,
Admin = 1 << 1,
Helpdesk = 1 << 2
}
Run Code Online (Sandbox Code Playgroud)
那是不一样的
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1,
Admin = 2,
Helpdesk = 4
}
Run Code Online (Sandbox Code Playgroud) 为了好奇,我试图读取标志寄存器并以一种很好的方式将其打印出来.
我已经尝试使用gcc的asm关键字阅读它,但我无法让它工作.任何提示如何做到这一点?我正在运行Intel Core 2 Duo和Mac OS X.以下代码就是我所拥有的.我希望能告诉我是否发生溢出:
#include <stdio.h>
int main (void){
int a=10, b=0, bold=0;
printf("%d\n",b);
while(1){
a++;
__asm__ ("pushf\n\t"
"movl 4(%%esp), %%eax\n\t"
"movl %%eax , %0\n\t"
:"=r"(b)
:
:"%eax"
);
if(b!=bold){
printf("register changed \n %d\t to\t %d",bold , b);
}
bold = b;
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了分段错误.当我运行gdb时,我得到了这个:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x000000005fbfee5c
0x0000000100000eaf in main () at asm.c:9
9 asm ("pushf \n\t"
Run Code Online (Sandbox Code Playgroud) 我需要为输出文件的格式创建新的标志.我上课了
class foo{
bar* members;
ofstream& operator<<(ofstream&);
ifstream& operator>>(ifstream&);
};
Run Code Online (Sandbox Code Playgroud)
我想用它像:
fstream os('filename.xml');
foo f;
os << xml << f;
os.close();
Run Code Online (Sandbox Code Playgroud)
这将保存一个xml文件.
fstream os('filename.json');
foo f;
os << json << f;
os.close();
Run Code Online (Sandbox Code Playgroud)
这是一个json文件.
我怎样才能做到这一点?
我只是想将我的代码从C#转换为Haxe NME.我使用枚举作为标志.
[Flags]
enum State
{
StateOne = 1,
StateTwo = 2,
StateThree = 4
}
Run Code Online (Sandbox Code Playgroud)
并使用它
if (someObj.HasState(State.StateOne | State.StateTwo))
{
// Contains both the states. Do something now.
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何在Haxe NME中这样做.
谢谢.
我正在使用go-flags来解析命令行选项.
根据go-flags文档:"... [if] -h或--help在命令行参数中指定,将自动打印一条帮助消息.此外,返回特殊错误类型ErrHelp."
我打电话的方法是:
func (p *Parser) Parse() ([]string, error) {
Run Code Online (Sandbox Code Playgroud)
我打电话给:
var opts struct {
// ...
}
func main() {
parser := flags.NewParser(&opts, flags.Default)
args, err := parser.Parse()
Run Code Online (Sandbox Code Playgroud)
定义ErrHelp的文件的片段如下所示:
type ErrorType uint
const (
// Unknown or generic error
ErrUnknown ErrorType = iota
// Expected an argument but got none
ErrExpectedArgument
// ...
// The error contains the builtin help message
ErrHelp
// ...
)
// Error represents a parser error. The error returned …Run Code Online (Sandbox Code Playgroud) 假设我有一面旗帜public static final boolean FLAG.在开发中,我希望它是true,但在生产中,我希望它是false.
我是否应该true在开发过程中将其设置为,并且当我们构建/发布时,有人会进入并将其更改为false?
我有一种感觉,因为它看起来很糟糕,所以不是这样的.
我应该采取什么方法?
我有可能在多个组件中定义的标志。无法知道某个组件是否已经定义了标志,例如两个组件Foo和Bar需要标志Zed,但是Foo和Bar必须定义标志Zed。在这种情况下,Go的标志将出现错误,并重新定义错误标志。
只有在未在其他地方初始化标志的情况下,才可以选择初始化吗?或者,检查是否已设置标志,然后再查找标志值?
我看到的唯一方法就是这样:
var fooFlag *string
func init() {
if flag.Lookup("foo") == nil {
fooFlag = flag.String("foo", "", "some flag foo")
}
}
func initFlags() {
if fooFlag == nil && flag.Lookup("foo") != nil {
temp := (*flag.Lookup("foo")).Value.(flag.Getter).Get().(string)
fooFlag = &temp
}
}
func main() {
flag.Parse()
initFlags()
...
}
Run Code Online (Sandbox Code Playgroud)
但是,这非常丑陋(而且不确定其效果如何)。有什么更好的方法吗?
我正在Kubernetes中运行一个容器化的java应用程序.
为了根据容器规范制作jvm保留存储器,-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap必须设置标志.
如果这两个标志都与Xms和Xmx标志一起设置,那么jvm的行为是什么?一面旗帜会覆盖另一面吗?
例如,如果我们java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xms -Xms2500M -Xmx2500M -jar myjar.jar
在容器中有容量限制4Gi用于请求而4Gi用于响应,则在具有128Gi内存的主机中,JVM会保留多少内存?
flags ×10
c# ×3
.net ×2
enums ×2
go ×2
java ×2
assembly ×1
c ×1
c++ ×1
containers ×1
docker ×1
enum-flags ×1
fstream ×1
haxe ×1
kubernetes ×1
low-level ×1
nme ×1
types ×1
web-services ×1
x86 ×1