我在C#(.NET 2.0)中有一个代码,我在其中使用输入Enum调用方法,但我无法使其工作。
我在方法isAnOptionalBooleanValue:
中有编译错误 public static bool isAnOptionalBooleanValue(Status status, String parameterName,
Object parameter) {
return isAnOptionalValidValue(status, parameterName, parameter,
UtilConstants.BooleanValues);
}
public static bool isAnOptionalValidValue(Status status, String parameterName,
Object parameter, Enum setOfValues)
{
....
}
在其他课程中:
public class UtilConstants
{
public enum BooleanValues
{
TRUE, FALSE
}
}
这个类的存在是因为boolean值来自其他系统的输入String,因此我将其作为Object传递并将其从我的Enum类转换为布尔值。
它返回的错误如下: “UtilConstants.BooleanValues”是'type',在给定的上下文中无效“ 返回isAnOptionalValidValue(...)行中的错误。
但我不知道如何修复它。改变它:
return isAnOptionalValidValue(status,parameterName,parameter, typeof运算(UtilConstants.BooleanValues));
也不起作用。
有什么想法吗? 感谢您的帮助!
答案 0 :(得分:5)
您需要使用实际值,而不是UtilConstants.BooleanValues
(确实是类型而不是值)。像这样:
UtilConstants.BooleanValues.TRUE | UtilConstants.BooleanValues.FALSE
或者,如果您确实想要检查输入字符串是否与枚举类型的常量匹配,则应更改签名:
public static bool isAnOptionalValidValue(Status status, String parameterName,
Object parameter, Type enumType)
这样您使用typeof
建议的方法调用就可以了
然后,您可以通过调用Enum.GetValues(enumType)
答案 1 :(得分:5)
您可能宁愿使用
bool myBool;
Boolean.TryParse("the string you get from the other system", out myBool);
而不是重新定义布尔。
你也可以将“可选”作为可以为空的bool(如果没有值为true,则为false,则为null):
bool? myBool = null;
bool tmp;
if (Boolean.TryParse("the string you get from the other system", out tmp))
myBool = tmp;
答案 2 :(得分:1)
Enum setOfValues
表示您传递特定值,如BooleanValues.TRUE
- 而不是键入自身。要传递类型,请使用Type setOfValues
。
从字符串使用中解析特定的枚举值
BooleanValues enumValue = (BooleanValues)Enum.Parse(typeof(UtilConstants.BooleanValues), stringValue);
答案 3 :(得分:0)
您提到从其他系统获得string
,您必须转换为Boolean
类型。所以我没有使用枚举,而是为此目的编写自己的转换器:
public static class SpecificBooleanConverter
{
private static Dictionary<string, bool> _AllowedValues;
static SpecificBooleanConverter()
{
_AllowedValues = new Dictionary<string, bool>(StringComparer.CurrentCultureIgnoreCase);
_AllowedValues.Add("true", true);
_AllowedValues.Add("false", false);
_AllowedValues.Add("foo", true);
_AllowedValues.Add("bar", false);
}
public static bool TryParse(string value, out bool result)
{
return _AllowedValues.TryGetValue(value, out result);
}
}
然后可以这样调用:
bool dotNetBoolean;
var booleansFromOtherSystem = new[] { "hello", "TRUE", "FalSE", "FoO", "bAr" };
foreach (var value in booleansFromOtherSystem)
{
if (!SpecificBooleanConverter.TryParse(value, out dotNetBoolean))
{
Console.WriteLine("Could not parse \"" + booleansFromOtherSystem + "\".");
}
if (dotNetBoolean == true)
{
Console.WriteLine("Yes, we can.");
}
else
{
Console.WriteLine("No, you don't.");
}
}