我如何打开一个设置了flags属性的枚举(或更精确地用于位操作)?
我希望能够在与所声明的值匹配的开关中击中所有情况.
问题是,如果我有以下枚举
[Flags()]public enum CheckType
{
Form = 1,
QueryString = 2,
TempData = 4,
}
Run Code Online (Sandbox Code Playgroud)
我想用这样的开关
switch(theCheckType)
{
case CheckType.Form:
DoSomething(/*Some type of collection is passed */);
break;
case CheckType.QueryString:
DoSomethingElse(/*Some other type of collection is passed */);
break;
case CheckType.TempData
DoWhatever(/*Some different type of collection is passed */);
break;
}
Run Code Online (Sandbox Code Playgroud)
如果"theCheckType"设置为CheckType.Form | CheckType.TempData我希望它能同时击中两个案例.显然,由于中断,它不会在我的示例中同时出现,但除此之外它也会失败,因为CheckType.Form不等于CheckType.Form | CheckType.TempData
那么我能看到的唯一解决方案就是为每个可能的枚举值组合做一个案例?
就像是
case CheckType.Form | CheckType.TempData:
DoSomething(/*Some type of collection is passed */);
DoWhatever(/*Some different type of collection is passed */);
break; …Run Code Online (Sandbox Code Playgroud) 我使用Newtonsoft.Json库
有没有办法在反序列化期间修剪任何字符串数据的空格?
class Program
{
class Person
{
[JsonProperty("name")]
public string Name;
}
static void Main(string[] args)
{
var p = JsonConvert.DeserializeObject<Person>(@"{ name: "" John "" }");
Console.WriteLine("Name is: \"{0}\"", p.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
添加:
最后,我有自定义转换器的解决方案.不好,但比Trim()更好.
如果有人有任何想法如何以更自然的方式做,请欢迎.
class Program
{
sealed class TrimAttribute : Attribute
{ }
class TrimConverter<T> : JsonConverter where T : new()
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jObject …Run Code Online (Sandbox Code Playgroud)