admin管理员组文章数量:1596327
测试消除If-Else代码如下:
#region 消除eliminate remove If-Else
public static void TestRemoveIfElse()
{
Console.WriteLine($"TestRemoveIfElse");
TestIfElse testIfElse = new TestIfElse();
TestIfElse.TestOrder order = new TestIfElse.TestOrder { Id = 1, Name = "zhansan" };
var result = TestIfElse.RemoveIfElse(order, "json");
Console.WriteLine($"消除eliminate remove If-Else:{result}");
result = TestIfElse.RemoveIfElse1(order, "json");
Console.WriteLine($"消除eliminate remove If-Else:{result}");
result = TestIfElse.RemoveIfElse3(order, "json");
Console.WriteLine($"消除eliminate remove If-Else:{result}");
result = testIfElse.RemoveIfElse4(order, "json");
Console.WriteLine($"消除eliminate remove If-Else:{result}");
result = testIfElse.RemoveIfElse4(order, "plaintext");
Console.WriteLine($"消除eliminate remove If-Else:{result}");
}
public class TestIfElse
{
/// <summary>
/// 第一种方式,最常见的方式
/// </summary>
/// <param name="order"></param>
/// <param name="formatType"></param>
/// <returns></returns>
public static string RemoveIfElse(TestOrder order, string formatType)
{
string result = string.Empty;
if (formatType.Equals("json", StringComparison.OrdinalIgnoreCase))
{
result = JsonConvert.SerializeObject(order);
}
else if (formatType.Equals("plaintext", StringComparison.OrdinalIgnoreCase))
{
result = $"id={order.Id},name={order.Name}";
}
else
{
result = $"Unknown format";
}
return result;
}
/// <summary>
/// 第二种方式,假设只有两种情况,也就是json和plaintext这两种格式
/// </summary>
/// <param name="order"></param>
/// <param name="formatType"></param>
/// <returns></returns>
public static string RemoveIfElse1(TestOrder order, string formatType)
{
//先决条件
if (string.IsNullOrWhiteSpace(formatType))
return $"Unknown format";
//if (formatType is null)
// return $"Unknown format";
//处理逻辑
return formatType == "json" ? JsonConvert.SerializeObject(order) : $"id={order.Id},name={order.Name}";
}
/// <summary>
/// 第三种方式,使用字典处理key格式名称,value是Func<TestOrder, string>(对应的处理逻辑)
/// </summary>
/// <param name="order"></param>
/// <param name="formatType"></param>
/// <returns></returns>
public static string RemoveIfElse3(TestOrder order, string formatType)
{
//先决条件
if (string.IsNullOrWhiteSpace(formatType))
return $"Unknown format";
//字典应该是在其他位置预先设置好的,然后在这里使用,这里只为演示
Dictionary<string, Func<TestOrder, string>> dict = new Dictionary<string, Func<TestOrder, string>>
{
["json"] = a => JsonConvert.SerializeObject(a),
["plaintext"] = a => $"id={a.Id},name={a.Name}"
};
//处理逻辑
return dict[formatType]?.Invoke(order);
}
#region 第四种方式使用反射和特性还有字典
/// <summary>
/// 第四种方式使用反射和特性还有字典
/// </summary>
/// <param name="order"></param>
/// <param name="formatType">特性标记的名称(特性中定义的字段Name)</param>
/// <returns></returns>
public string RemoveIfElse4(TestOrder order, string formatType)
{
//先决条件
if (string.IsNullOrWhiteSpace(formatType))
return $"format is null";
字典应该是在其他位置预先设置好的,然后在这里使用,这里只为演示
var dict = GetType().Assembly
.GetExportedTypes()
.Where(t => t.GetInterfaces().Contains(typeof(IFormat123)))
.ToDictionary(t => t.GetCustomAttribute<FlagFormatAttribute>().Name);
if (dict[formatType] is null)
return $"No valid format";
//处理逻辑
var format = Activator.CreateInstance(dict[formatType]) as IFormat123;
return format.Format(order);
}
/// <summary>
/// 格式化接口
/// </summary>
public interface IFormat123
{
/// <summary>
/// 格式化处理方法
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
string Format(TestOrder order);
}
/// <summary>
/// json格式化
/// </summary>
[FlagFormat(Name = "json")]
public class JsonFormat : IFormat123
{
public string Format(TestOrder order)
{
return JsonConvert.SerializeObject(order);
}
}
/// <summary>
/// plaintext格式化
/// </summary>
[FlagFormat(Name = "plaintext")]
public class PlainTextFormat : IFormat123
{
public string Format(TestOrder order)
{
return $"id={order.Id},name={order.Name}";
}
}
/// <summary>
/// xml格式化
/// </summary>
[FlagFormat(Name = "xml")]
public class XMLFormat : IFormat123
{
public string Format(TestOrder order)
{
return $"<id>{order.Id}></id>,<name>{order.Name}</name>";
}
}
#endregion
/// <summary>
/// 测试类
/// </summary>
public class TestOrder
{
public int Id { get; set; }
public string Name { get; set; }
}
/// <summary>
/// 自定义特性,主要用于区分不同的对象
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class FlagFormatAttribute : Attribute
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}
#endregion
测试结果如下:
public class Program
{
static void Main(string[] args)
{
#region 消除eliminate remove If-Else
TestRemoveIfElse();
#endregion
Console.Read();
}
}
版权声明:本文标题:消除eliminate remove If-Else 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728255674a1150984.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论