我目前正在编写一个方法,它会执行以下操作:
现在,如果我实现传统的嵌套if 它可以工作。绝对零问题 - 然而,为了我认为的更清洁的实现已经变成了一个可爱的错误。
语法:
bool result = false;
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal role = new WindowsPrincipal(user);
result = ((Environment.OSVersion.Platform == PlatformID.Win32NT &&
Environment.OSVersion .Version.Major > 6
&& role != null && role.IsInRole(WindowsBuiltInRole.Administrator)
? true : false);
但我收到以下例外。
运算符
&&
无法应用于类型的操作数System.PlatformID
和bool
。
我真的不确定为什么它不起作用,它应该。我是在正确地实施逻辑还是什么,我真的不知所措。
此语法确实有效,但当我将其转换为上述条件时,它不会。
if(Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion
.Version.Major > 6)
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal role = new WindowsPrincipal(user);
if(role != null)
{
if(role.IsInRole(WindowsBuiltInRole.Administrator))
{
return true;
}
}
return false;
}
return false;
更新
这是出现红色波形的地方,Visual Studio提出了上述错误:
PlatformID.Win32NT && Environment.OSVersion.Version.Major > 6
答案 0 :(得分:2)
实际上你并不需要使用条件运算符 - 实际上… ? true : false
根本没有任何效果。
尝试重写您的代码:
bool result =
(Environment.OSVersion.Platform == PlatformID.Win32NT) &&
(Environment.OSVersion.Version.Major > 6) &&
(role != null) &&
(role.IsInRole(WindowsBuiltInRole.Administrator));
答案 1 :(得分:2)
您的条件可以像这样重写:
bool result = Environment.OSVersion.Platform == PlatformID.Win32NT &&
Environment.OSVersion.Version.Major > 6 &&
role.IsInRole(WindowsBuiltInRole.Administrator);
请注意,您可以跳过“角色”空检查,因为在您的情况下它永远不会为空。
修改强>
就您的更新而言,问题在于这一部分:
bool result = PlatformID.Win32NT; // <-- this part can't compile, it's not a boolean
我相信你的意思是:
bool result = Environment.OSVersion.Platform == PlatformID.Win32NT; // along with your other conditions
编辑2
既然你已经问过为什么你的样本没有工作(不确定你有什么拼写错误或究竟发生了什么),但这段代码也会编译(注意: I不会像那样写,只是说):
bool result = ((Environment.OSVersion.Platform == PlatformID.Win32NT &&
Environment.OSVersion.Version.Major > 6
&& role != null && role.IsInRole(WindowsBuiltInRole.Administrator)
? true
: false));
答案 2 :(得分:0)
未经测试,您可以尝试
bool result = false;
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal role = new WindowsPrincipal(user);
result = (((Environment.OSVersion.Platform == PlatformID.Win32NT) &&
(Environment.OSVersion .Version.Major > 6)
&& (role != null) && ((role.IsInRole(WindowsBuiltInRole.Administrator)
)? true : false))));
return result;